poj3045Cow Acrobats(贪心)

来源:互联网 发布:java方法名是什么 编辑:程序博客网 时间:2024/05/18 01:35

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

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

假设现在的队列是已经排好的,那么取其中任意两个位置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);}


0 0
原创粉丝点击