http://acm.hdu.edu.cn/showproblem.php?pid=42
分析:条件:A.w+A.s<B.w+b.s
具体分析:http://blog.csdn.net/acm_ted/article/details/7984935
1) a=sum-si;b=sum+wi-sj;
交换两个板的位置
2)b'=sum-sj;a'=sum+wj-si;
如果1优于2,求解得有效的条件为wj-si>wi-sj。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int NM=100005;
struct Build{
int x,y;
}t[NM];
bool comp(struct Build A,struct Build B)
{
if(A.x+A.y<B.x+B.y) return 1;
else return 0;
}
int main()
{
__int64 sum,ans;
int n,i;
while(cin>>n)
{
for(i=0;i<n;i++)
cin>>t[i].x>>t[i].y;
sort(t,t+n,comp);
sum=ans=0;
for(i=0;i<n;i++)
{
if(sum-t[i].y>ans)
ans=sum-t[i].y;
sum+=t[i].x;
}
printf("%I64d\n",ans);
}
return 0;
}
http://acm.hdu.edu.cn/showproblem.php?pid=4310
分析:A的结果优于B,即:sum*hpA+(sum-dpA)*hpB<sum*hpB+(sum-dpB)*hpA
即:sum*(hpA-hpB)+sum*(hpB-hpA)-dpA*hpB<-dpB*hpA
化简得:dpA*hpB>dpB*hpA(dpA/hpA>dpB/hpB)