题目
注意贪心的指标的比例就好了
#include <iostream>
using namespace std;
int main()
{
int* f, * j, *vis;
double* d;
int m, n;
cin >> m >> n;
while (m != -1 || n != -1)
{
{
f = new int[n];
j = new int[n];
d = new double[n];
for (int i = 0; i < n; ++i)
cin >> j[i] >> f[i];
for (int i = 0; i < n; ++i)
d[i] = j[i] * 1.0 / f[i];
vis = new int[n]();
}
double max_m = 0;
while (m > 0)
{
int max_site = -1;
double max_d = 0;
for (int i = 0; i < n; ++i)
if (max_d < d[i] && !vis[i])
max_d = d[i], max_site = i;
if (max_site == -1)
break;
vis[max_site] = 1;
if (m < f[max_site])
{
double a = m * 1.0 / f[max_site];
max_m += a * j[max_site];
m = 0;
}
else
{
m -= f[max_site];
max_m += j[max_site];
}
}
printf("%.3f\n", max_m);
delete[] vis;
delete[] d;
delete[] f;
delete[] j;
cin >> m >> n;
}
return 0;
}