欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HDU 1009 FatMouse' Trade(贪心得模拟)

程序员文章站 2022-03-05 14:48:39
...

题目链接https://vjudge.net/contest/309172#problem/C
解析:输入m和n(m个英镑,n个房间),接着n行,每行两个数j[i],f[i]。化f[i]的钱买到j[i]的东西,花完m,保证买到的j[i]的数量最大。(也可以用af[i]的单价买到aj[i]的数量)
联系生活实际:你可以想象一下,在生活中让你去买,你会怎么买?如果花相同单价的钱,你肯定想买的东西最多。所以贪心的思想就体现出来了。让每单位的钱买到的数量最多。即使最后的钱只够买一小部分,和所有的相比,这些钱也能买的数量最多。所有商品性价比排序
代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Mi{
    double j,f,p;
} nod[1001];
int cmp(Mi x,Mi y){
    return x.p>y.p;
}
int main(){
    int n,m;
    double sum;
    while(~scanf("%d %d",&m,&n)){                 //m英镑,n个房间
        sum=0;
        if(m==-1&&n==-1)break;
        for(int i=0; i<n; i++){
            scanf("%lf %lf",&nod[i].j,&nod[i].f);
            nod[i].p=nod[i].j/nod[i].f;//相当于单价
        }
        sort(nod,nod+n,cmp);
        for(int i=0;i<n;i++){
            if(m>nod[i].f){
                sum+=nod[i].j;
                m-=nod[i].f;
            }
            else{
                sum+=nod[i].p*m;
                break;
              }
        }
        printf("%.3lf\n",sum);
    }
    return 0;
}

暑假集训拉开序幕
HDU 1009 FatMouse' Trade(贪心得模拟)

相关标签: 贪心