每种物品只有一个且不可分割,只能选择拿或不拿。每种物品的价值为 v,重量为 w。

在背包负重有限的情况下,求背包能够容纳的物品的最大价值。

暴力枚举法:有N种物品,每一种都可以选择拿或不拿,总共有 2N种可能性要考虑。N = 20时,有超过一百万种组合要考虑。

DP (Dynamic Programming):建表纪录目前位置最好的结果,一步一步地考虑状态转移。

建立二维的DP表格,dp[m+1][W+1] (m种物品,背包最大负重W),初始值为 0。

dp[i+1][j]:考虑到第 i 种物品时,最大负重为 j 的背包,能够拿取的最大价值。

注意:范例程式码的第15行,为了重复利用内存,循环需逆向执行。