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; }