hdu 1009(贪心)

//贪心,比例从大往后贪
#include <cstdio>
#include <cstdlib>
#include <iostream>

using namespace std;

struct node {
double j;
double f;
double c;
}s[100000];

int cmp(const void *a, const void *b) {
node *c = (node *)a;
node *d = (node *)b;
if (c->c > d->c) return -1;
return 1;
}

int main() {
int m, n;
while (scanf("%d%d", &m, &n) && (m != -1 || n != -1)) {
int i;
for (i=0; i<n; ++i) {
scanf ("%lf%lf", &s[i].j, &s[i].f);
s[i].c = s[i].j / s[i].f; //计算比例
}
qsort(s, n, sizeof(s[0]), cmp);
double sum = 0;
for (i=0; i<n; ++i) { //贪心
if (m >= s[i].f) {
sum += s[i].j;
m -= s[i].f;
}
else {
sum += m / s[i].f * s[i].j;
break;
}
}
printf ("%.3lf\n", sum);
}
return 0;
}

 

你可能感兴趣的:(HDU)