题目链接:点击打开链接
题目分析:贪心算法+轮换对称 ,a:wi,si;b:wj,sj;
对于a在b上:pda:wi-sj
b在a上:wj-si;
当a优于b时;wi-sj>wj-si wi+si>wj+wj
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<algorithm>
using namespace std;
struct data{
int weight;
int strenth;
};
data info[100010];
int cmp( data a,data b)
{
return (a.weight+a.strenth)<(b.weight+b.strenth);
}
int main()
{
int n,i,w,s;
__int64 ans,temp,sum;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d %d",&info[i].weight,&info[i].strenth);
sort(info,info+n,cmp);
ans=info[0].weight-info[1].strenth;
sum=info[0].weight;
for(i=1;i<n-1;i++)
{
sum+=info[i].weight;
temp=sum-info[i+1].strenth;
if(ans<temp) ans=temp;
}
if(ans<=0) ans=0;
if(n==1) printf("0\n");
else printf("%I64d\n",ans);
}
return 0;
}