算法系列——背包问题总结

113 阅读1分钟

写在前面

“背包问题”是一个非常经典的问题.

状态定义

dp[i][j]:表示当使用goods[0, …, i],最多可装j重量物品时,此时背包最多能装物品的价值
(这里我们使用的是二维dp方法,因为二维入门理解较为容易,一维的可以通过简单的修改就得到。)

状态转移方程

0/1背包

定义:物品只能用一次

dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]] + value[i])

完全背包

定义:物品可以用无限次

dp[i][j] = max(dp[i-1][j], dp[i][j-weight[i]] + value[i])

注意这两种问题的区别仅仅是dp[ ][j-weight[i]] + value[i]( = i-1/i)不同