HDU 1009 FatMous'Trade(贪心)

来源:互联网 发布:淘宝开旗舰店费用 编辑:程序博客网 时间:2024/06/04 19:22

题目链接:Click here

题意:FatMouse准备了m磅的食物,以便用来交换它喜欢的食物,JavaBean。
现在有N个房间,第i个房间有J[i]磅的JavaBean,其交换的筹码是F[i]磅的食物。
当然,FatMouse还是有很大的选择权的,对任意一个房间,它可以只交换一部分的食物。
现要求FatMouse以怎样的策略才能获得最多的JavaBean。

思路:将javaBean/catfood的比值从大到小排列,比值大的也就是性价比高, 换的食物多。

#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;struct node{    double f, j, k;}info[1005];int cmp(node x, node y){    return x.k > y.k;}//按照k的大小进行排序int main(){    //freopen("testin.txt", "r", stdin);    int m, n;    double ans;    while(scanf("%d%d", &m, &n) != EOF)    {        if(m == -1 && n == -1)break;        for(int i = 0; i < n; i++)        {            scanf("%lf%lf", &info[i].j, &info[i].f);            info[i].k = info[i].j / info[i].f;        }        sort(info, info+n, cmp);        ans = 0;        for(int i = 0; i < n; i++)        {            if(m > info[i].f)            {                ans += info[i].j;                m -= info[i].f;            }            else            {                ans += info[i].k * m;//如果m小于这个房间所需要的f值,那么就按照剩下的m换取所能得到的j                break;            }        }        printf("%.3lf\n", ans);    }    return 0;}
0 0