解决方案:
1.贪心(不像是能用动归做)
2.以什么来贪心呢
3.重量,显然不行
4.力量也不行
5.猜测:与重量和力量都有关,再分析样例,发现是重量+力量
6.证明:设有a和b两头相邻的牛(a在下,b在上)
7.若Wa+Sa<Wb+Sb
8.交换a和b位置,设b上方牛总体重为W
9.a原:W+Wb-Sa b原:W-sb(<W+Wb-Sa) a改:W-Sa b改:W+Wa-Sb(>W-Sa)
10.显然W+Wa-Sb<W+Wb-Sa
11.证毕
12.注意结果有可能是负数(不然60分)
13.AC 奉上代码
#include<iostream>
#include<algorithm>
using namespace std;
struct cow
{
int w,s;
}c[50002];
long long ans=-2147483647,wt;
int n;
bool cmp(cow a,cow b)
{
return a.w+a.s<b.w+b.s;
}
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>c[i].w>>c[i].s;
wt+=c[i].w;
}
sort(c+1,c+n+1,cmp);
for(int i=n; i>=1; i--)
{
wt-=c[i].w;
ans=max(wt-c[i].s,ans);
}
cout<<ans;
return 0;
} //为什么是普及/提高-