题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1009
题解:
思路是:将每组输入和JavaBean与CatFood的比值装入一个结构体中,各结构体根据J/F的比值按非升序排序,然后优先选取全面的仓库换取食物。
代码:
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <cmath>
#include <algorithm>
using namespace std;
typedef struct Trade
{
int j;
int f;
double rate;
};
Trade mouse[3000];
bool cmp(Trade a, Trade b) {
return a.rate > b.rate;
}
int main()
{
int n, m;
while (scanf("%d %d", &m, &n) && (m != -1 || n != -1)) {
for (int i = 0; i < n; ++i) {
scanf("%d %d", &mouse[i].j, &mouse[i].f);
mouse[i].rate = (double)mouse[i].j / mouse[i].f;
}
sort(mouse, mouse + n, cmp);
double sum = 0;
for (int i = 0; i < n; ++i) {
if (m > mouse[i].f) {
m -= mouse[i].f;
sum += mouse[i].j;
}
else {
sum += mouse[i].rate*m;
m = 0;
break;
}
}
printf("%.3f\n", sum);
}
return 0;
}