#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
struct Info//存储输入食物的信息
{
double JavaBean;
double CatFood;
double rate;
};
bool mycomp (Info a, Info b)//按照它的比例的大小而排序!比率小的在前!
{
return a.rate < b.rate;
}
int main()
{
int food, num;
while (cin >> food >> num && food != -1 && num != -1)
{
Info *a = new Info[num];
vector<Info> v;
double ans = 0;
for (int i = 0; i < num; i++)
{
cin >> a[i].JavaBean >> a[i].CatFood;
a[i].rate = a[i].CatFood / a[i].JavaBean;
v.push_back(a[i]);
}
sort(v.begin(), v.end(), mycomp);
for (int i = 0; i < num; i++)
{
if (food > v[i].CatFood)//如果catfood的食物足够的话,就继续兑换!
{
ans += v[i].JavaBean;
food -= v[i].CatFood;
}
else//如果食物不够的话,就按比率来计算!
{
ans += food * v[i].JavaBean / v[i].CatFood;
break;
}
}
cout.setf(ios_base::fixed);
cout.precision(3);
cout << ans << endl;
}
}zoj 2109 FatMouse' Trade
最新推荐文章于 2022-12-07 08:13:55 发布
本文介绍了一个通过比较不同食物的兑换比例来进行最优兑换的选择算法。该算法首先读取输入的食物数量及每种食物的JavaBean和CatFood含量,计算出每种食物的兑换率,并将食物按兑换率从小到大排序。接着遍历排序后的食物列表,优先选择兑换率较低的食物进行兑换,直至达到所需的食物总量。
173

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



