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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章