背包的最大体积V是5
最大重量M是6
共有4个物品
单个物品的体积v = {0, 1, 2, 3, 4};
单个物品的价值w = {0, 2, 4, 4, 5};
单个物品的重量m = {0, 3, 4, 5, 6};
对于二维背包问题限制无非是从体积变成了体积和重量,所以我们把表示价值的一维数组扩成二维数组即可。代码如下:
public class Main {
static int V = 5;
static int M = 6;//最大重量是6
static int n = 4;
static int[] v = {0, 1, 2, 3, 4};
static int[] w = {0, 2, 4, 4, 5};
static int[] m = {0, 3, 4, 5, 6};// 每个物品的重量
public static void main(String[] args) {
int [][] f = new int[V+1][M+1];
for(int i = 1;i<= n;i++)
for(int j= V;j>=v[i];j--)
for(int k = M;k>=m[i];k--)
f[j][k] = Math.max(f[j][k],f[j-v[i]][k-m[i]]+w[i]);
System.out.println(f[V][M]);
}
}