方法:贪心,类似uva上龙与勇士的例题,排序后从头开始取。
AC代码
#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <cstdio>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>
#include <ctime>
using namespace std;
struct Food
{
double J;
double F;
double radio;
};
const int maxn = 1000+10;
int cmp(const void *a, const void *b)
{
return (*(Food *)a).radio < (*(Food *)b).radio ? 1 : -1;
}
int main()
{
#ifdef Local
freopen("a.in", "r", stdin);
#endif
int M = 0, N = 0, i = 0;
while (cin >> M >> N && M >= 0 && N >= 0)
{
Food food[maxn] = {0, 0, 0};
double sum = 0;
for (i = 0; i < N; i++)
{
cin >> food[i].J >> food[i].F;
food[i].radio = food[i].J / food[i].F;
}
qsort(food, N, sizeof(food[0]), cmp);
for (i = 0; i < N && M > 0; i++)
{
if (M >= food[i].F)
{
sum += food[i].J;
M -= food[i].F;
}
else
{
sum += food[i].radio * M;
M = 0;
}
}
cout << fixed << setprecision(3) << sum << endl;
}
return 0;
}