题意:
老鼠要拿猫粮(F)换鼠粮(J)
老鼠手上有M磅猫粮(F),有N个房间,每个房间的猫都开出了不同的兑换比例
输入数据为每个房间中用多少猫粮(F)可以换多少鼠粮(J)
需要计算老鼠最多可换得鼠粮(J)总数
思路:
计算每个房间猫鼠粮的权重比并进行排序,优先兑换比重大的
Code:
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstdio>
using namespace std;
struct Food
{
double j, f;
double rate;
}food[1005];
int cmp(Food x, Food y)
{
return x.rate > y.rate;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1009in.txt","r",stdin);
#endif
int m, n;
int i;
double sum;
while(cin>>m>>n && !(m == -1 || n == -1)){
for(i = 0; i < n; i++){
cin>>food[i].j>>food[i].f;
food[i].rate = food[i].j / food[i].f;
}
sort(food, food+n, cmp);
sum = 0;
for(i = 0; i < n; i++){
if(m*food[i].rate <= food[i].j){
sum += m*food[i].rate;
break;
}
else{
sum += food[i].j;
m -= food[i].f;
}
}
cout<<fixed<<setprecision(3)<<sum<<endl;
}
return 0;
}
本文介绍了一种通过计算不同房间猫粮与鼠粮兑换比例来最大化鼠粮收益的算法。该算法首先计算每个房间的兑换比例,然后按比例从高到低排序,优先选择比例高的房间进行兑换,直至所有猫粮兑换完毕。

229

被折叠的 条评论
为什么被折叠?



