耍杂技的牛
有n头牛叠罗汉,每头牛有俩属性:w表示重量,s表示强壮值
危险值:上面牛重量和-强壮值
要求 :最大的危险值最小
结论,按wi+si从小到大的顺序排序
假设wi+si>w(i+1)+s(i+1),看看可以不可以交换,使最大危险值变小
第i个位置 第i+1个位置
交换前 w1+...+w(i-1) -si w1+...+ wi-s(i+1)
交换后 w1+...+w(i-1) -s(i+1) w1+...+ w(i-1)+w(i+1)-si
全加上si+s(i+1)
s(i+1) wi+s(i)
s(i) w(i+1)+s(i+1) 知最大危险值变小了
#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N=50010;
int n;
PII cow[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
int w,s;
cin>>w>>s;
cow[i]={w+s,w};
}
sort(cow,cow+n);
int res=-2e9,sum=0;
for(int i=0;i<n;i++)
{
int w=cow[i].second,s=cow[i].first-w;
res=max(res,sum-s);
sum+=w;
}
cout<<res<<endl;
return 0;
}