这道题目是一道非常简单的贪心,但是我却修改了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==-1 && n==-1) break; amount = 0.0f; memset(visit, 0, sizeof(visit)); for (i=0; i<n; ++i) { scanf("%d %d", &JF[i].js, &JF[i].fs); if (JF[i].fs == 0) { amount += JF[i].js; visit[i] = 1; 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=0; i<n; ++i) { if (visit[i]==0 && JF[i].rate>tmp) { tmp = JF[i].rate; j = i; } } visit[j] = 1; if(m >= JF[j].fs) { amount += JF[j].js; m -= JF[j].fs; } else { amount += JF[j].rate*m; m = 0; } } printf("%.3lf ", amount); } return 0; }