题目链接 : HDU1009 - FatMouse’ Trade
思路
水题,简单 贪心,按照 比率大小 进行排序,然后依次交换,用 int 的话注意下 类型转化 就行了
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1000;
struct node
{
double j;
double f;
}room[maxn+10];
struct cmp
{
bool operator()(const node & a, const node & b)
{
return (a.j/a.f) > (b.j/b.f);
}
};
int main()
{
int m, n;
while(scanf("%d%d", &m, &n) && (m!=-1))
{
for(int i=0; i<n; i++)
scanf("%lf%lf", &room[i].j, &room[i].f);
sort(room, room+n, cmp());
double re = 0;
int cur = 0;
while(m>0 && cur<n)
{
if(m>=room[cur].f)
{
re += room[cur].j;
m -= room[cur].f;
cur++;
}
else
{
re += room[cur].j/room[cur].f*m;
break;
}
}
printf("%.3f\n", re);
}
return 0;
}