HDU-1009-FatMouse' Trade

来源:互联网 发布:灯塔炒股软件 编辑:程序博客网 时间:2024/06/11 16:32

ACM模版

描述

描述

题解

算法思想上就是一到十分简单的贪心……但是还是要为它点个赞~(≧▽≦)/~

因为我这种英语渣渣猛一看,以为是01背包/(ㄒoㄒ)/~~还好苦海无涯,我回头是岸,发现原来每个屋子里的咖啡豆量是可以分割的,所以直接求出每个房间的咖啡豆的性价比即可,然后排序贪心,然而,搞到这里,这么简单个题,我还是WA了,这也是我点赞的原因——卡精度了。题目最后要求输出的结果保留三位小数,所以我想当然的用了float型,结果,精度不够,改成double就AC了。

必须承认,这道题的数据很强很强了~~~第一次遇见卡精度卡到这种程度的(主要还是我太渣,没见识过世面)。

代码

#include <iostream>#include <algorithm>using namespace std;const int MAXN = 1010;struct room{    int J;    int F;    double value;} R[MAXN];bool cmp(room a, room b){    return a.value > b.value;}int main(int argc, const char * argv[]){    int M, N;    while (cin >> M >> N && (M != -1 || N != -1))    {        for (int i = 0; i < N; i++)        {            cin >> R[i].J >> R[i].F;            R[i].value = R[i].J * 1. / R[i].F;        }        sort(R, R + N, cmp);        double res = 0;        for (int i = 0; i < N; i++)        {            if (R[i].F <= M)            {                res += R[i].J;                M -= R[i].F;            }            else            {                res += R[i].value * M;                break;            }        }        printf("%.3lf\n", res);    }    return 0;}
0 0