Wi +Si 从小到大排序即为最优。
贪心题很多都是按照某种形式排序,那么可以从排序入手,第i个节点和第i+1个节点交互,如果不会产生更坏的结果,那要满足什么条件,然后就按照这个条件排序,比如这题如果满足wi+1+si+1<si+wi,那么最大值不会变大,。
#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
using namespace std;
const int M=1e5+5,INF=0x3f;
typedef pair<ll,ll> ppi;
vector<ppi>a;
ll pre[M];
bool cmp(ppi tx,ppi ty)
{
return tx.x+tx.y<ty.x+ty.y;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
ll l,r;
cin>>l>>r;
a.push_back({l,r});
}
sort(a.begin(),a.end(),cmp);
ll ans=-1e18;
for(int i=1;i<=a.size();i++)
{
pre[i]=pre[i-1]+a[i-1].x;
ans=max(pre[i-1]-a[i-1].y,ans);
}
cout<<ans<<endl;
return 0;
}