NOIP2012 D1T2既视感…
具体做法和证明见NOIP2012解题报告…
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=50010;
int n,ans=-(1<<29);
struct Data{
int w,s;
friend bool operator<(Data x,Data y){
return x.w+x.s<y.w+y.s;
}
}d[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d",&d[i].w,&d[i].s);
sort(d+1,d+n+1);
for(int i=1,sum=0;i<=n;i++){
ans=max(ans,sum-d[i].s);
sum+=d[i].w;
}
printf("%d\n",ans);
return 0;
}