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

3 篇文章 0 订阅
农夫的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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值