FatMouse' Trade(贪心)

来源:互联网 发布:游戏编程设计学校 编辑:程序博客网 时间:2024/06/08 04:31

题意:给出两个数以及两个序列,第一个序列是能获得的最大价值,第二个序列是获得这个价值需要的付出,求最大价值。

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009

思路:求每个的“性价比”,每次取性价比最高的那个,取完就置为0。

代码:

#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>using namespace std;double javabean[1100];double pays[1100];double deserve[1100];int main(){    double n,m;    while(cin >> m >> n)    {        if(n == -1 && m == -1)            break;        for(int i=0; i<n; i++)        {            scanf("%lf%lf",&javabean[i], &pays[i]);            deserve[i] = javabean[i]/pays[i];        }        double sum=0;        while(m)        {            double maxn = 0;            int k;            for(int i=0; i<n; i++)            {                if(maxn <= deserve[i])                {                    k = i;                    maxn = deserve[i];                }            }            if(maxn)            {                if(m >= pays[k])                {                    sum += javabean[k];                    m -= pays[k];                    deserve[k] = 0;                }                else                {                    sum += deserve[k]*m;                    m = 0; //全部用来取这个了                }            }            else                break;        }        printf("%.3f\n",sum); //此处在codeblocks上不能用%lf,答案会全部是0.000    }    return 0;}
0 0
原创粉丝点击