题目链接:见这里 题意:给了一些物品,每个物品有俩个价格,一个是打折前的,一个是打折后的(打折发生在一周后),现在一个人必须先买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); } PRintf("%d/n", ans); return 0;}新闻热点
疑难解答