您的位置:首页 > 其它

BZOJ_1629_[Usaco2007_Demo]_Cow_Acrobats_(贪心)

2016-07-09 10:29 267 查看

描述

http://www.lydsy.com/JudgeOnline/problem.php?id=1629

\(n\)头牛叠罗汉.第\(i\)头牛的力量为\(s_i\),重量为\(w_i\),危险值为它头上的牛的\(w\)之和减去它的\(s\),求最大危险值最小.

 

分析

注意到力量大的应该放在下面,重量大的也应该放在下面.我们想到把和值小的放在下面.

贪心很好证明.

 

 

#include <bits/stdc++.h>
using namespace std;

const int maxn=50000+5,INF=~0u>>1;
int n,ans,now;
struct node{
int w,s,x;
bool operator < (const node &a) const { return x<a.x; }
}a[maxn];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i].w,&a[i].s);
a[i].x=a[i].s+a[i].w;
}
sort(a+1,a+n+1);
ans=-INF;
for(int i=1;i<=n;i++){
ans=max(ans,now-a[i].s);
now+=a[i].w;
}
printf("%d\n",ans);
return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: