这道题目是一道非常简单的贪心,但是我却修改了1h+。原因就是qsort的comp有bug。其实还是题目中的数据可以为0。除数为0真的要慎重啊。后来改为结构体,加一层循环选取最大值,果然ac啊。wa了几次,测试数据都过,还是wa。无语。这道题目一定要注意数据类型,double型。
#include <stdio.h>
#include <stdlib.h> #define MAXNUM 10050 typedef struct {
int js, fs;
double rate;
} JF_st; JF_st JF[MAXNUM];
int visit[MAXNUM]; int main() {
int n;
int i, j;
double m, amount, tmp; while (scanf("%lf %d", &m, &n) != EOF) {
if (m==- && n==-)
break; amount = 0.0f;
memset(visit, , sizeof(visit)); for (i=; i<n; ++i) {
scanf("%d %d", &JF[i].js, &JF[i].fs);
if (JF[i].fs == ) {
amount += JF[i].js;
visit[i] = ;
JF[i].rate = 0.0f;
} else {
JF[i].rate = JF[i].js * 1.0f / JF[i].fs;
}
} while (m>0.0 && n) {
tmp = 0.0f;
for (i=; i<n; ++i) {
if (visit[i]== && JF[i].rate>tmp) {
tmp = JF[i].rate;
j = i;
}
}
visit[j] = ;
if(m >= JF[j].fs) {
amount += JF[j].js;
m -= JF[j].fs;
} else {
amount += JF[j].rate*m;
m = ;
}
} printf("%.3lf\n", amount);
} return ;
}