题目传送门
思路
贪心。
考虑到,如果把 ai 换成 bi,总重量会减少 ai−bi。
每次操作找到最大的 ai−bi,把 ai 替换成 bi。
所以,我们可以将这些物品按 ai−bi 递减的顺序来排序。
排序后,按照从 1 到 n 的顺序替换,直到总重量不超过 m 为止。
程序末尾还要判断一下,当 ai 全部替换成 bi 时,是否能装下。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include<bits/stdc++.h> using namespace std; #define int long long struct node{int a,b;} a[100010]; bool cmp(node a,node b) { return a.a-a.b>b.a-b.b; } int n,m; signed main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>m; int sum=0; for(int i=1;i<=n;i++) cin>>a[i].a>>a[i].b,sum+=a[i].a; if(sum<=m) { cout<<0;return 0; } sort(a+1,a+1+n,cmp); for(int i=1;i<=n;i++) { sum-=a[i].a-a[i].b; if(sum<=m) { cout<<i;return 0; } } cout<<"-1"; return 0; }
|