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
",ans);
23     return 0;
24 }
View Code
原文地址:https://www.cnblogs.com/Sunnie69/p/5655320.html