HDU-1009-肥鼠交易

这题是一道简单的可拆分的贪心题目,需要注意的是,我们定义的结构体里面都应该用double类型, 或者float类型,不然两个int相除,就失去了精度(强转也可以)。

#include <cstdio>
#include <algorithm>
using namespace std;
int m, n;
struct Room {
    double j, f;
    double k;
    bool operator < (const Room &b)const {
        return k > b.k;
    }
} a[1000];


int main()
{
    while (scanf("%d%d",&m,&n)&&m!=-1&&n!=-1) {
        for (int i = 0; i < n;i++) {
            scanf("%lf%lf", &a[i].j, &a[i].f);
            a[i].k = a[i].j / a[i].f;
        }
        sort(a, a + n);
        double pock=0, value=0;
        for (int i = 0; i < n; i++) {
            if (pock+a[i].f<m) {
                value += a[i].j;
                pock += a[i].f;
            }
            else {
                value += (a[i].j / a[i].f) * (m - pock);
                break;
            }
        }
        printf("%.3lf
", value);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/xyqxyq/p/10366588.html