BZOJ_1629_[Usaco2007_Demo]_Cow_Acrobats_(贪心)

描述


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

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

 

分析


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

贪心很好证明.

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn=50000+5,INF=~0u>>1;
 5 int n,ans,now;
 6 struct node{
 7     int w,s,x;
 8     bool operator < (const node &a) const { return x<a.x; }
 9 }a[maxn];
10 int main(){
11     scanf("%d",&n);
12     for(int i=1;i<=n;i++){
13         scanf("%d%d",&a[i].w,&a[i].s);
14         a[i].x=a[i].s+a[i].w;
15     }
16     sort(a+1,a+n+1);
17     ans=-INF;
18     for(int i=1;i<=n;i++){
19         ans=max(ans,now-a[i].s);
20         now+=a[i].w;
21     }
22     printf("%d\n",ans);
23     return 0;
24 }
View Code

 

posted @ 2016-07-09 10:29  晴歌。  阅读(275)  评论(0编辑  收藏  举报