[Algorithmic Toolbox学习笔记][week6]0/1 Knapsack Problem

问题描述

具体的问题描述请参考以下链接:

[Algorithmic Toolbox学习笔记][week3]战利品的最大价值_Karen_AMPM的博客-CSDN博客假设小偷有一个背包只能放下一定重量的货物。如果他来到一家商店,商店里有不同的商品(已知数量和单价)。那么小偷在背包重量有限的情况下,拿走哪些商品才能保证在背包允许的最大重量下商品总价值最高呢?https://blog.csdn.net/Karen_AMPM/article/details/126730940?spm=1001.2014.3001.5501

假设我们有以下一组数据:

背包可承受的最大重量:10kg

item重量和价值如下:

               weight   value

item1      5kg        60元  --> 指5kg item1的价值为60元

item2      3kg        50元

item3      2kg        70元

item4      1kg        30元

在上方链接的文章中,当我们要去计算能够被拿走的物品的最大价值的时候,我们使用的是物品的单价(即每千克这个物品的价值是多少),然后去做Greedy Algorithm的计算,即当有5kg item1的时候我们可以只拿走2kg。因此如果使用链接中的代码来运行的话,背包中应该放如下物品:

2kg 的 item3 --> value is 2 x 35 = 70
1kg 的 item4 --> value is 1 x 30 = 30
3kg 的 item2 --> value is 3 x 16.666 = 50
4kg 的 item1 --> value is 4 x 12 = 48

最大价值等于 198

但是,0/1 Knapsack Problem与上方问题不同的是,0/1 Knapsack Problem需要解决的是如何在不拆分物品的条件下去计算出物品的最大价值。比如现有5kg的item1价值60元,那么我们在拿的时候,要么5kg全部拿走,要么不拿,即不能像上面的例子中只拿走4kg。

Knapsack Problem算法解析

分两种情况来解析:

Knapsack with repetitions:指不限制每一个item的组合(重量和价格)的数量。

Knapsack without repetitions (use dynamic programming):指每一个item的组合只有一个。

假设我们有以下一组数据:

weight_list = [5, 3, 2, 1]
value_list = [60, 50, 70, 30]

比如同样针对这组数据,当背包最大承受重量为4kg的时候:

Knapsack with repetitions:我们可以用2组item3(总重量等于4kg),此时的最大价值为140元。
Kna

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值