本人此时还是一名研一的小菜鸡,刚学会了这个算法的基本概念,来总结一下,谁知道今后的我再看到这篇自己写的博客的时候会不会笑出来,哈哈哈哈哈哈哈哈,所以吗,错了的化大佬们评论指正就好了。
还有系列文章分支限界法解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循环就可以了。