完全背包问题

完全背包问题是 0-1 背包问题的衍生问题。

区别

完全背包中每个物品可以重复选择(选择后仍然存在),与 0-1 背包中每个物品只能选一次不同。

状态转移方程

在完全背包问题中,选择该物品的转移方程改为:

dp[i][j] = max(dp[i-1][j], dp[i][j - w[i]] + v[i])

注意这里第二项是 dp[i][…] 而非 dp[i-1][…],因为物品 i 可以重复选择。j 需要从小到大遍历。

核心思想

允许重复选择意味着在决定是否选择物品 i 时,选择物品 i 之后仍然可以继续选择物品 i,因此在同一行内传递状态。

链接到