贪心算法简要理解

简介:贪心算法顾名思义就是比较比较贪心的一个算法,思路就是要贪。做的选择每一步都是最贪的。

例题:你提着一个袋子去买米,正好米店做活动,给你免单,但是只能用你自己的袋子装。米店里有三种米,分别是 白米,黑米,紫米,假设三种米价值分别为2元一斤,3元一斤,4元一斤,你的袋子可以装20斤,但是由于你来的太晚了,三种米分别只剩下15斤,10斤,4斤,那么你怎么装才能让你装的米,价值最大。

解析:很显然,我们应该先挑贵的装,这才符合我们贪心的想法。贵的紫米只有4斤,装完紫米,还有空位,这时候就去装黑米,装完黑米还有空位,这时候就去装白米,直到装不下了。

伪代码:

  value[3],weight[3],cap=20,money=0,;//三种米的价值value,剩余数量weight,袋子容量cap,装了的米的价值money;

    sort(value,weight);//将米的价值按高到低排好序,同时米的剩余数量对应好,

 for(i=0;i<3;i++)//循环遍历米的价值数组 如果袋子还有容量,就装米,如果袋子容量小于这种米数量,那就只装剩下容量的数量。如果没有空位了,推出循环。

 if(cap>0)

    if(cap>=weight[i])

       {money+=weight[i]*value[i];

        cap=cap-weight[i]}

    else  {

      money+=cap*value[i];

     cap=0;}

 else break;

01背包问题:进阶思考:

买米换成买水果,袋子变成10斤,水果为苹果,香蕉,菠萝,三种水果每种只有1个,重量分别为

4,5,7 ,价值分别为 4,5,8;水果不可切开,请问如果装水果才能价值最大化。

未完待续:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值