一张表解释01背包问题
背包问题的概述:
已知背包容量为m,有一堆物品(n个),每个物品都有重量和价值
,求解怎么放物品能让拿到的东西价值达到最大。
一道测试用例:
10 4
3 10
4 11
5 12
6 13
dp数组可视化:
操作 | n\m | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
输入3 10 | 1 | 0 | 0 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 |
输入4 10 | 2 | 0 | 0 | 10 | 11 | 11 | 11 | 21 | 21 | 21 | 21 |
输入5 12 | 3 | 0 | 0 | 10 | 11 | 12 | 12 | 21 | 22 | 22 | 22 |
输入6 13 | 4 | 0 | 0 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 |
答案和输入顺序无关,因为 dp[i][j]=max(dp[i-1][j-w]+value,dp[i-1][j]) 会自动调整当前最优解。