【HDOJ】1009 FatMouse' Trade

这道题目是一道非常简单的贪心,但是我却修改了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\n", amount);
    }

    return 0;
}

 

posted on 2014-03-05 21:41  Bombe  阅读(192)  评论(0编辑  收藏  举报

导航