描述
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 }
时间: 2024-10-12 22:10:20