您的位置:首页 > 其它

poj3045Cow Acrobats(贪心)

2015-08-20 19:19 183 查看
一看到最大值最小就想到了二分答案,但是呢?然后呢?(如果有人想明白为什么这个不能用二分答案能不能指点一下呢^-^)

好吧,最后看了题解是贪心。

假设现在的队列是已经排好的,那么取其中任意两个位置i ,j (i<j),i处的压力等于前面重量之和Wq-s[i],j处等于Wq+w[i]+中间重量之和Wm-s[j]。

再调换一下i,j,j处为Wq-s[j],i处为Wq+w[j]+Wm-s[i]。

那么这个队列没有原来那个好,Wq+w[j]+Wm-s[i] > Wq+w[i]+Wm-s[j],即w[j]+s[j] > w[i]+s[i]。

#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
int w,s;
}edge[50050];
int cmp(node a,node b)
{
return a.w+a.s>b.w+b.s;
}
int n;
int sum;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d %d",&edge[i].w,&edge[i].s);
sum+=edge[i].w;
}
sort(edge+1,edge+1+n,cmp);
int ans=-0x3f3f3f3f;
for(int i=1;i<=n;i++)
{
sum-=edge[i].w;
ans=max(ans,sum-edge[i].s);
}
printf("%d",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息