Descriptionsnode
农夫的N只牛(1<=n<=50,000)决定练习特技表演。 特技表演以下:站在对方的头顶上,造成一个垂直的高度。 每头牛都有重量(1 <= W_i <= 10,000)和力量(1 <= S_i <= 1,000,000,000)。奶牛崩溃的风险等同于她身上全部的奶牛的重量(固然不包括她本身)减去她的力量。你的任务是肯定奶牛的顺序,从而使得全部牛的风险中最大的一个尽可能小。Input第1行:一个整数N 第2 . .N+ 1行: 两个空格分隔的整数重量wi和力量si来描述奶牛i。Output一个整数,在全部牛的风险中最大的一个ios
Sample Inputspa
3 10 3 2 5 3 3
Sample Output.net
2
Hintcode
样例解释: 把重量为10的牛放在底部。她将携带另外两只牛,因此她的崩溃的风险是2 +3-3= 2。其余的奶牛有比她低的崩溃风险。blog
题目连接排序
https://vjudge.net/problem/POJ-3045ip
简单想了一下用贪心w+s越大应在越下面(又重,又有力气,固然放在下面)ci
因此排序,扫一遍便可get
AC代码
#include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include <string> #include <cstring> #include <map> #include <stack> #include <set> #include <sstream> #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #define Mod 1000000007 #define eps 1e-6 #define ll long long #define INF 0x3f3f3f3f #define MEM(x,y) memset(x,y,sizeof(x)) #define Maxn 100000+100 using namespace std; int n; struct node { int w,s,sum; bool operator<(const node &c)const//按体重从小到大排序 { return sum<c.sum; } }; node a[Maxn]; int main() { while(cin>>n) { for(int i=0;i<n;i++) { cin>>a[i].w>>a[i].s; a[i].sum=a[i].w+a[i].s; } sort(a,a+n);//排序 int ans=-INF;//注意不能是0 int sum=0;//累计体重 for(int i=0;i<n;i++) { ans=max(ans,sum-a[i].s);//求最大的崩溃值 sum+=a[i].w;//把上面的体重加一块儿 } cout<<ans<<endl; } return 0; }