HDU - 1009 简单贪心

目录

  • (一)大意
  • (二)思路
  • (三)代码

HDU - 1009的题目链接

(一)大意

这个题其实不难,但英语看的着实令人难受。博主大概来翻译一下,大概就是给你m磅的猫粮,有n个房子,每个房子呢,都有若干的javabeans。每个房子的猫粮与javabeans的兑换比率不同,(比如数据给你的是7 2,代表2磅猫粮可以换7磅javabeans。所以我们希望 j[i] /f[i]的比率越大越好)你要做的就是尽可能把手中的猫粮换成更多的javabeans。

(二)思路

思路很简单啊,考虑到每个房子的猫粮与javabeans的兑换比率不同。我们只要优先去兑换比率高的房子即可,即用少的猫粮去兑换多的javabeans。我们只需要计算每个房子中猫粮与javabeans的兑换率,再来个排序。这样就能实现,优先每次去的是兑换比率最高的房子,这样,我们手中的猫粮,就能换到最多的javabeans

(三)代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
const int maxn = 1000;
const int inf=0x3f3f3f3f;
struct Node
{
   double j,f,price; //price是性价比,性价比高代表能用猫粮换更多的javabeans
};
bool cmp(Node a,Node b)
{
    return a.price>b.price; 
     //把房子按性价比从高到底排列,这样我们优先进入兑换性价比高的房子
}
int main()
{
       double sum,m;  
    // m是我们手中的猫粮数量,要设为double ,sum为我们得到的javabeans的数量
       int n;
       while(scanf("%lf%d",&m,&n)!=EOF)
       {
           sum=0;
           if(m==-1&&n==-1) break;
           Node fatmouse[maxn];
           for(int i=0;i=fatmouse[i].f) //如果手中的猫粮比这个房子所有猫粮要多
               {
                   m-=fatmouse[i].f; //全部把房子里面的猫粮换成javabeans
                   sum+=fatmouse[i].j; 
               }
               else
               {
                   sum+= fatmouse[i].price*m; 
                   //当手中猫粮不足时,就把手里的猫粮全部兑换成的javabeans
                   m=0;
               }
           }
           printf("%.3f\n",sum);
       }
    return 0;
}


你可能感兴趣的:(HDU - 1009 简单贪心)