您的位置:首页 > 其它

POJ 3262 Protecting the Flowers

2015-08-18 19:07 232 查看
POJ 3262 Protecting the Flowers

保护花朵。。。。约翰的奶牛每分钟吃掉D_i朵花,把它赶走需要T_i分钟(来回加倍)。问最小损失花朵数量。

n头搬走一头剩下n-1在吃花(竟然不是草),那到底搬哪一头好呢?这就有一个效率问题。哪个牛“吃”的最猛搬哪个,每分钟吃的数量已经是固定的了,看每个牛的损失比例:用(吃的速度 )D 除以 T(干的时间)。就把时间变量解决了。现在问题就变成了:在赶每头牛时间都一样的情况下,赶那头牛好(当然是D/T大的了—_—|||)

#include<iostream>
#include<algorithm>
using namespace std;
struct Cow
{
double T,D,E;
};
Cow cow[100000];
//按D/T的值从大到小排序
bool is_less(const Cow& a,const Cow& b)
{
return a.E>=b.E;
}
int main()
{
int N;
cin>>N;
int i=0;
int total_destroy=0;
for(;i<N;i++)
{
cin>>cow[i].T>>cow[i].D;
cow[i].E=cow[i].D/cow[i].T;
//顺便记录下当前这批牛的总毁花能力-_-,因为后面发现搬走一头要用这个来计算
total_destroy+=cow[i].D;
}
sort(cow,cow+N,is_less);
//这个要注意:如果结果是相加的一个数字就要注意是否会溢出,设置成long long比较保险
long long destroy=0;
for(i=0;i<N;i++)
{
total_destroy-=cow[i].D;
destroy+=cow[i].T*2*total_destroy;
}
cout<<destroy<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: