poj3045Cow Acrobats(贪心)

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

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

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


发布了59 篇原创文章 · 获赞 1 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章