今天来聊聊经典的背包问题!😎无论是01背包、完全背包还是多重背包,都能通过动态规划优雅解决。📚✨
01背包就像挑选礼物,每件物品只能选一次。用一个二维数组dp记录状态,`dp[i][j]`表示前i件物品放入容量为j的背包的最大价值。核心公式是:
`dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i])`
完全背包则是无限次选择,状态转移方程稍作调整:
`dp[j] = max(dp[j], dp[j-w[i]] + v[i])`
至于多重背包,物品有数量限制,可以用二进制拆分优化。📦💻
Python代码实现起来也很简洁,快来试试吧!👩💻👨💻 编程 算法 动态规划