题目大意如标题:
注意点:求具体方案数时,我们不能像以前那样定义 d p dp dp了。以往我们令 d p ( i ) dp(i) dp(i)为容量 ≤ i \leq i ≤i的最大价值。然后再多令一个 f ( i ) f(i) f(i)代表在 d p ( i ) dp(i) dp(i)取最优解下的方案数.
但是 d p dp dp的定义是前缀形式。所以答案会不正确.
那么定义 d p ( i ) dp(i) dp(i)为:容量恰好为 i i i的背包最大价值.
那初始化的时候就令 d p ( 0 ) = 0 , d p ( i ) = − i n f i ∈ [ 1 , V ] dp(0)=0,dp(i)=-inf \ \ i \in [1,V] dp(0)=0,dp(i)=−inf i∈[1,V]即可.