01背包问题【动态规划法求解】通俗易懂,适合小白

本人此时还是一名研一的小菜鸡,刚学会了这个算法的基本概念,来总结一下,谁知道今后的我再看到这篇自己写的博客的时候会不会笑出来,哈哈哈哈哈哈哈哈,所以吗,错了的化大佬们评论指正就好了。

还有系列文章分支限界法解01背包问题,回溯法解01背包问题哈,需要的化以下是链接:

分支限界法:https://blog.csdn.net/qq_29051107/article/details/103395841

回溯法:https://blog.csdn.net/qq_29051107/article/details/103395285

1背包问题题干(题目中所给出的条件和问题)

给定n种物品和一背包。物品i的体积是si,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 设用V[i,j]表示从前i项物品中装入体积为j的背包的物品的最大价值,以下为V[i,j]的表达式

其中C=9,有4种物品S1=2, S2=3, S3=4, S4=5, V1=3, V2=4, V3=5, V4=7。

刚开始看的时候,上边这个公式看的我头有点晕,于是我将他们写到了每个题的下边,不用每次都去翻前边的题干去。

C:背包容量,此题中为9

Si:物品i的体积            此题中为 {2,3,4,5}

Wi(Vi,两种不同的写法而已):物品i的价值  此题中为{3,4,5,7}

 

2动态规划法求解

将带求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。(与分治法类似)
所求问题经分解得到的子问题不是相互独立的。(与分治法不同)

动态规划法解决01背包问题,最主要的就是一个动态规划表如下:

注意其中的高亮部分,高亮部分代表,体积此时满足可以放入下一个物品时,要考虑下是否要放入下一个物品

以i = 3时为例:

此时i = 3,表明我们可以在前三个物品中依次进行选择是否放入(注意是依次,不要上来就选择物品3,要从物品1开始,依次选择)。而前三个物品的体积分别为2,3,4。所以我们背包中的价值应该在以下几个值进行改变。

2,此时价值为3

3,此时价值为4

4,此时价值为5

5 = 2 + 3(表明此时物品一和二可以都被放入背包了)此时价值为物品1的价值加上物品2的价值:3 + 4 = 7

6 = 2 + 4(物品1和3可以同时被放入背包了)此时价值为 3 + 5 = 8

7 = 3 + 4(。。。。。自己理解)此时价值为 4 + 5 = 9 

9 = 2 + 3 + 4(。。。。。自己理解)此时价值为 3 + 4 + 5 = 12 

最多到9,因为前三个物品体积最多是9,而且背包容量最大也是9.这就限制着背包中的价值最大量,也就是表格中所需要填写的内容。

依次填满表格,找出最优值即为背包所能承受的最大价值了。

 

具体代码我就不现丑了,两个for循环就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cc菠菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值