给定背包容量和若干物品的重量与价值,在不超过容量的前提下,选择物品使总价值最大。本页逐步填充二维 dp 表,并展示最优解的回溯过程。
时间复杂度:O(N·V) | 空间复杂度:O(N·V)
思路说明:dp[i][w] 表示从前 i 个物品中选择,放入容量为 w 的背包能获得的最大价值。对于每个物品,只有“选”或“不选”两种选择:不选时价值等于 dp[i-1][w];选时价值等于 dp[i-1][w-weights[i-1]] + values[i-1](前提容量足够)。取两者较大值填入表格。最后从 dp[N][V] 倒推,如果 dp[i][w] 与 dp[i-1][w] 不同,说明第 i 个物品被选中。