本文主要是介绍HDU 1009(贪心),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:老鼠一共有m斤猫食,xxx一共有n个仓库。每个仓库有a b两种数据,a表示当前仓库一共有多少斤鼠食,b表示当前仓库要换a斤鼠食要多少猫食。求老鼠最多能换多少食物。
第一组数据是m n,接下来一共有n组数据,每组是对应仓库的a b。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
struct Cat
{
private:
int j, f;
double ave;
public:
Cat() {}
Cat(int _j, int _f) : j(_j), f(_f)
{
ave = double(j) / f;
}
bool operator <(const Cat& rhs) const
{
return ave > rhs.ave;
}
int max()
{
return f;
}
double average()
{
return ave;
}
int maxfood()
{
return j;
}
} cat[1010];
int main()
{
int m, n, i, j, f;
double sum;
while (scanf("%d%d", &m, &n) != EOF && ~m && ~n)
{
sum = 0;
for (i = 0; i < n; ++i)
{
scanf("%d%d", &j, &f);
cat[i] = Cat(j, f);
}
sort(cat, cat + n);
for (i = 0; i < n; ++i)
{
if (cat[i].max() >= m)
{
sum += cat[i].average() * m;
break;
}
else
{
sum += cat[i].maxfood();
m -= cat[i].max();
}
}
printf("%.3lf\n", sum);
}
return 0;
}
这篇关于HDU 1009(贪心)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!