完全背包问题
记录在此,以防忘记
-
完全背包与01背包的区别是,完全背包中的每种物体有一个或多个
-
例:有5个物品,标号为1-5,重量分别是[2,2,6,5,4],价值分别是[6,3,5,4,6],5个物品的数量分别为2,1,1,1,2,背包总承受为10。
-
完全背包转移方程为
-
dp[i][j] = max(dp[i-1][j-w[i]*k]+v[i]*k, dp[i][j]);得到表格:
重量w | 价值v | 编号i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
2 | 6 | 1 | 0 | 0 | 6 | 6 | 12 | 12 | 12 | 12 | 12 | 12 | 12 |
2 | 3 | 2 | 0 | 0 | 6 | 6 | 12 | 12 | 12 | 15 | 15 | 15 | 15 |
6 | 5 | 3 | 0 | 0 | 6 | 6 | 12 | 12 | 12 | 15 | 15 | 15 | 17 |
5 | 4 | 4 | 0 | 0 | 6 | 6 | 12 | 12 | 12 | 15 | 15 | 16 | 17 |
4 | 6 | 5 | 0 | 0 | 6 | 6 | 12 | 12 | 15 | 15 | 17 | 17 | 21 |
public class 背包问题之多重背包 {
public static void main(String[] args) {
int[] w = {