您的位置:首页 > 其它

poj 3045 Cow Acrobats (贪心!!不是二分,)

2018-01-25 23:12 405 查看
农夫的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一个整数,在所有牛的风险中最大的一个
Sample Input
3
10 3
2 5
3 3


Sample Output
2


Hint

样例解释: 把重量为10的牛放在底部。她将携带另外两只牛,所以她的崩溃的风险是2 +3-3= 2。其他的奶牛有比她低的崩溃风险。

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
#define MAX 50000
struct Cow
{
int weight, strength;
bool operator<(const Cow& other)const
{
//return other.weight<weight;
return other.strength+other.weight<strength+weight;
}
}cow[MAX];
int main()
{
int N;
while(cin>>N)
{
int total = 0;
for (int i=0;i<N;++i)
{
scanf("%d%d",&cow[i].weight,&cow[i].strength);
total+= cow[i].weight;
}
sort(cow,cow+N);
int risk = 0x80808080;
for(int i=0; i<N;++i)
{
total-=cow[i].weight;						// 减去自己的重量
risk=max(risk,total-cow[i].strength);	// 计算risk
}
cout <<risk<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: