01背包:n个物品每种都有一个
完全背包:n个物品每种都有相同数量个
多重背包:n个物品每种都有不同数量个
背包暴力解法:每种物品只有两种状态,可以枚举采用回溯算法试一试
题目:三种物品的编号,重量和价值--->(0,1,15)和(1,3,20)和(2,4,30)
dp数组含义:
dp[i,j]:[0,i]物品任取放入容量为j的背包的最大价值(i表示物品编号)
递推公式:
不放物品i:dp[i-1][j]
放物品i:dp[i-1][j-wight[i]] + value[i]
dp[i,j] = max(不放,放)
dp数组初始化:
第一行和第一列需要初始化,其他可以初始化为任意值,不影响最终结果。
遍历顺序:
(针对二维dp数组解决01背包问题,两层for循环可以调换,因为只要(i,j)正上方和左上方有数值即可)
先遍历背包和先遍历物品都可以。
卡码网第46题: