01 背包问题可不可以不用动态规划解?

2019-12-04 18:31:21 +08:00
 hakunamatata11

爆搜法和贪心法也是解决 01 背包的思路,但都存在局限。

爆搜法解 01 背包

举例:背包容量 m = 10,物品大小 A = [2, 3, 5, 7] ,物品价值 V = [1, 5, 2, 4]

爆搜解法:分别枚举每一个物体取或者不取,1 代表取,0 代表不取

爆搜算法的局限

贪心法解 01 背包

取价值最高:

取重量最轻 :

取单位价值最高:

可以看到,所有的贪心都是错误的!!!

那么,动态规划如何解 01 背包呢?

举例 1:

背包容量 m = 10,物品大小 A = [2, 3, 5, 7] ,物品价值 V = [1, 5, 2, 4]。

使用数组来记录取前 i 个物品,在容量 j 的情况下能取的最大价值 :

dp[i][j]表示前 i 个物体,在容量 j 的情况下,能取到的最大价值

如果取第 i 个物体,价值为 dp[i - 1][j - A[i]] + V[i] (j-A[i]>0)

如果不取第 i 个物体,价值为 dp[i - 1][j]

状态转移:dp[i][j] = max(dp[i - 1][j – A[i]] + V[i], dp[i - 1][j])

实际上,除了 01 背包外,我们还需要掌握背包问题的另外 2 种的子问题——完全背包和多重背包问题,剩下一些都是这 3 种的变形以及组合。

如果你想把这个知识点学得更透彻,可以听一听《背包四讲》,基础知识和刷题都覆盖到了~

这门原价$199 的课程,现在免费

参与方式:

戳我免费试听后,添加九章 Sunny 微信 jiuzhang15,回复 [ V2EX 背包] + 试听报名截图即可免费获得整套课程

参与条件

九章新用户(未在九章购买过课程的都算新用户哦~)

1273 次点击
所在节点    推广
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/625975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX