背包问题 贪心算法_算法学习之从背包(贪心策略)到0-1背包(动态规划)

(本文长度:3958个字;预计阅读时间:10分钟)

89344c0b2e2037a72b81f5f6ced93193.png

背包(贪心策略)

背包问题本质上即转载问题,通常是在一定条件限制范围内要求我们寻求最佳的装载方式获取最佳的利益。所以普通的背包问题我们可以通过贪心算法来寻求最佳收益。

我们通过一个大家都耳熟能详的故事来说明贪心算法在普通背包问题中的应用。我们要讲的就是“阿里巴巴和四十大盗”的故事。

有一天,阿里巴巴赶着毛驴上山砍柴。下山的时候,远远看见一股尘烟,弥漫着直上天空,朝他卷来。靠近之后,他才看清是一对人马,他们一共四十人,个个身强力壮、行动敏捷。一个首领模样的人背着沉重的鞍袋,从丛林中走到一个巨石前,喃喃说道:“芝麻开门”,神奇的事情发生了,大石前突然出现一道宽阔的道路,于是强盗们鱼贯而入。阿里巴巴待在树上观察着,直到他们走得无影无踪后,才从树上下来。他大声喊道:“芝麻开门!”,洞门立即打开,他小心翼翼地走进去,一下惊呆了!山洞里堆满了金银珠宝。阿里巴巴想让乡亲们开开眼界,见识一下宝物,他想一个宝物拿一个,如果太重就用凿子凿开,但毛驴的装载能力是有限的,怎样才能用驴子运走最大价值的财宝分给穷人呢?

问题分析

假设山洞中有n种宝物,每种宝物有一定重量w和相应的价值v,毛驴运载能力有限,只能运走m重量的宝物,一种宝物只能拿一样,不过宝物是可以分割的。那么怎么才能使得毛驴运走的宝物价值最大呢?

对于需要获得价值最大化的问题,我们可以尝试贪心策略:

  1. 每次挑选价值最大化的宝物装入背包,得到的结果是否最优?
  2. 每次挑选重量最小的宝物装入,能否得到最优解?
  3. 每次挑选单位重量价值最大的宝物,能否价值最高?

想一想,如果选价值最大的宝物,但重量非常大,是不行的,因为装载能力有限,所以策略1不合适;如果选重量小的宝物,但可能价值也很小,所以也不能在总重限制的情况下保证价值最大,所以策略2也不合适;而策略3每次选择单位重量价值最大的,也就是性价比(价值/重量)最高的宝物,如果可以达到运载重量m,那么总价值一定是最大的。

宝物清单

e0a7c3a9806cef241904b1f61316ef19.png

样例

输入

第一行是宝物数量n和最大装载能力m,之后n+1行分别是每个宝物的重量w和价值v

10 304 32 89 185 65 88 205 54 65 75 15

输出

一行,表示装载的最大价值

70.5

<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值