Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 6266 | Accepted: 2349 |
Description
The cows aren't terribly creative and have only come up with one acrobatic stunt: standing on top of each other to form a vertical stack of some height. The cows are trying to figure out the order in which they should arrange themselves ithin this stack.
Each of the N cows has an associated weight (1 <= W_i <= 10,000) and strength (1 <= S_i <= 1,000,000,000). The risk of a cow collapsing is equal to the combined weight of all cows on top of her (not including her own weight, of course) minus her strength (so that a stronger cow has a lower risk). Your task is to determine an ordering of the cows that minimizes the greatest risk of collapse for any of the cows.
Input
* Lines 2..N+1: Line i+1 describes cow i with two space-separated integers, W_i and S_i.
Output
Sample Input
3 10 3 2 5 3 3
Sample Output
2
Hint
Put the cow with weight 10 on the bottom. She will carry the other two cows, so the risk of her collapsing is 2+3-3=2. The other cows have lower risk of collapsing.
Source
代碼:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 50017;
#define INF 0x3f3f3f3f
typedef struct
{
int w, s;
int ss;
} COW;
COW cow[MAXN];
bool cmp(COW a, COW b)
{
return a.ss < b.ss;
}
int main()
{
int n;
int sum[MAXN];
while(~scanf("%d",&n))
{
memset(sum,0,sizeof(sum));
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&cow[i].w,&cow[i].s);
cow[i].ss = cow[i].w+cow[i].s;
}
sort(cow+1,cow+n+1,cmp);
int ans = -INF;
for(int i = 1; i <= n; i++)
{
sum[i] = sum[i-1]+cow[i].w;
ans = max(ans,sum[i-1]-cow[i].s);
}
printf("%d\n",ans);
}
return 0;
}