多重背包问题描述:
有 N N N种物品,第 i i i种物品的体积是 c i c_i ci,价值是 w i w_i wi,每种物品的数量都是有限的,为 n i n_i ni。现有容量为 V V V的背包,求在总体积不超过 V V V的条件下,使得背包的总价值最大。
朴素算法:
将第 i i i类物品的 n i n_i ni个物品拆分,得 Σ n i \Sigma{n_i} Σni个物品,即将原问题转换为了01背包问题,时间复杂度为 O ( V × Σ n ) O(V\times\Sigma{n}) O(V×Σn)。
也可以在转移的过程中枚举 k k k,表示第 i i i种物品选取的数量。 d p [ i ] [ v ] = m a x ( d p [ i − 1 ] [ v − k ∗ c i ] + k ∗ w i ) , 0 ≤ k ≤ n i dp[i][v]=max(dp[i-1][v-k*c_i]+k*w_i),0\leq{k}\leq{n_i} dp[i][v]=max(dp[i−1][v−k∗ci