零、简单回顾背包问题
闫氏 DP 分析法:
- 状态表示 f [ i , j ] f[i,j] f[i,j]:
(1) 集合:所有只从前 i i i 个物品中选,且总体积不超过 j j j 的选法的集合
(2) 属性:Max - 状态计算 划分依据:“最后一步”
不同背包问题的状态计算各不相同,以01背包和完全背包为例:
01背包问题
状态计算:
(1) 不选择第 i i i 个物品的所有方案: f [ i − 1 , j ] f[i-1,j] f[i−1,j]
(2) 选第 i i i 个物品的所有方案: f [ i − 1 , j − v [ i ] ] + w [ i ] f[i-1,j-v[i]]+w[i] f[i−1,j−v[i]]+w[i]
因此有: f [ i , j ] = m a x { f [ i − 1 , j ] , f [ i − 1 , j − v [ i ] ] + w [ i ] } f[i,j]=max\{f[i-1,j],f[i-1,j-v[i]]+w[i]\} f[i,j]=max{
f[i−1,j],f[i−1,j−v[i]]+w[i]}
完全背包问题
状态计算:
(1) 不选第 i i i 个物品: f [ i − 1 , j ] f[i-1,j] f[i−1,j]
(2) 选 1 1 1 个第 i i i 个物品: f [ i − 1 , j − v [ i ] ] + w [ i ] f[i-1,j-v[i]]+w[i] f[i−1,j−v[i]]+w[i]
(3) 选 2 2 2 个第 i i i 个物品: f [ i − 1. j − 2 ∗ v [ i ] ] + 2 ∗ w [ i ] f[i-1.j-2*v[i]]+2*w[i] f[i−1.j−2∗v[i]]+2∗w[i]
…
(s+1) 选 s s s 个第 i i i 个物品: f [ i − 1 , j − s ∗ v [ i ] ] + s ∗ w [ i ] f[i-1,j-s*v[i]]+s*w[i] f[i−1,j−s∗v[i]]+s∗w[i]
其中 s [ i ] = ⌊ V / v [ i ] ⌋ s[i]=\lfloor V/v[i]\rfloor