题目
思路
每头牛的危险值 = 他前面牛的w(重量值)之和 - 自身的s(强壮值)
要使每头牛的危险值最小,根据贪心思想:
自身w值越大应该放到底部(即减小上述式中的被减数)
自身s值越大应该放到底部(即增大上述式中的减数)
话不多说,直接上代码
代码
/*AcWing 125. 耍杂技的牛-XMUOJ蒙德冒险者的游戏--JinlongW-2024/05/26危险值存在负的的情况;本题要求的是所有牛中最大的危险值(使用贪心策略使得该方案的这个值最小)*/
#include<bits/stdc++.h>
using namespace std;
const int N=50010;
typedef pair<int,int>PII;
PII cow[N];
int n;
long long sum=0;
int ans=0;
int main(){cin>>n;for(int i=0;i<n;i++){int w,s;cin>>w>>s;cow[i].first=w+s;cow[i].second=s;}sort(cow,cow+n);//按w+s从小到大排序int ws=cow[0].first,s=cow[0].second;ans=sum-s; //危险值,最上面的那只危险值肯定是负的sum+=ws-s;for(int i=1;i<n;i++){ws=cow[i].first,s=cow[i].second;if(sum-s>ans)ans=sum-s;sum+=(ws-s);}cout<<ans<<endl;return 0;
}