題目鏈接:見這里 題意:給了一些物品,每個物品有倆個價格,一個是打折前的,一個是打折后的(打折發生在一周后),現在一個人必須先買k個物品,然后剩下的物品既可以選擇現在買,也可以選擇一周后買,其中打折后的價格不一定比現有價格低,無良商人,大家都懂。 解法:我們先考慮一下必須買的k個物品,肯定要優先選擇那些打折后變貴的物品,并且在變得同等貴的時候,我們要優先買現在價格大的。買完k個之后,剩下的就是倆個價格取個小,這題就做完了。
//CF 779C#include <bits/stdc++.h>using namespace std;struct node{ int x, y; node(){}}a[200010];bool cmp(node a, node b){ if((a.x - a.y) == (b.x - b.y)){ return a.y > b.y; } return (a.x - a.y) < (b.x - b.y);}int n, k;int main(){ scanf("%d%d", &n, &k); for(int i = 1; i <= n; i++) scanf("%d", &a[i].x); for(int i = 1; i <= n; i++) scanf("%d", &a[i].y); sort(a + 1, a + n + 1, cmp); int ans = 0; for(int i = 1; i <= n; i++){ if(i <= k) ans += a[i].x; else ans += min(a[i].x, a[i].y); }新聞熱點
疑難解答