FatMouse' Trade hdu1009

无聊做题练练手

题目的大意:肥鼠使用猫粮和猫换粮食,猫把守着粮食仓库,仓库有不同的房间。不同房间的粮食需要使用不同量的猫粮换取。可以按比例换取一个房间的猫粮。求肥鼠最多可以换取多少粮食。此题毫无疑问使用贪心算法解决。解决此题代码如下:

#include <iostream>
#include <algorithm>
#define maxnum 1005
using namespace std;
struct room_type
{
   int J;//有这么多食物 
   int F;
   double J_F;
};
struct room_type room[maxnum];

bool cmpJ_F(room_type room1,room_type room2){
   return room1.J_F<room2.J_F;
}

int main()
{
   int M,N;
   while(scanf("%d%d",&M,&N)&&M!=-1&&N!=-1)
   {
        for(int i=0;i<N;i++)                                       
        {
           int j,f;
           scanf("%d%d",&j,&f);
           room[i].J = j;
           room[i].J_F=f/(double)j;
           room[i].F = f;
        }
        sort(room,room+N,cmpJ_F);//为什么会加到n 
        double max_get=0;
        for(int i=0;i<N;i++)
        {
             if(M>room[i].F)
             {
                M-=room[i].F;
                max_get+=room[i].J;       
             }else if(M>0)
             {
                max_get+=M/room[i].J_F;
                M=0;
             }else break;
        }
        printf("%.3lf\n",max_get);
   }
   return 0;    
}

总结:c++中sort函数的使用可以很清晰的体会出函数传值的特点,同时此处也需要知道sort的回调函数的参数是以sort参数为地址的值。返回值为true时不用变换顺序,返回值为false是需要变换顺序。而排序的结果是将sort参数这一串地址中的值进行了排序。

点击进入题目

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值