题目:传送门。
题意:中文题。
题解:r[i]-o[i]值大的先进行。反证法:如果大的后进行,会导致空间增大,所以一定大的是先进行。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; struct sa { ll r,o,c; } data[100005]; bool cmp(sa x,sa y) //注意这个排序方式 差值大的先进行 { return x.c>y.c; } int main() { ll n; while(cin>>n) { for(int i=0; i<n; i++) { cin>>data[i].r>>data[i].o;//注意(O[i]<R[i]) 这个很重要 data[i].c=data[i].r-data[i].o; } sort(data,data+n,cmp); ll ans=0,tmp=0; for(int i=0; i<n; i++) { ans=max(ans,tmp+data[i].r); tmp+=data[i].o; } cout<<ans<<endl; } return 0; }