给定 n 个物品和一个容量为 W 的背包,物品 i 的重量是 wi,其价值为 vi 。
应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?
(物品不能重用)
例:物品体积:2 3 4 5
物品价值 3 4 5 6
背包体积 8
输出10
public static int getMaxValue(int c[],int v[],int j) {
j=j+1;
int num[][] = new int [c.length][j];
for(int i=0;i<c.length;i++) {
num[i][0]=0;
}
for(int i=0;i<j;i++) {
num[0][i]=0;
}
for(int i=1;i<c.length;i++) {
for(int k=1;k<j;k++) {
num[i][k]=num[i-1][k];
if(k>=v[i]) {
num[i][k]=Math.max(num[i][k], c[i]+num[i][k-v[i]]);
}
}
}
return num[c.length-1][j-1];
}
思路如下面矩阵
0 0 0 0 0 0 0 0 0
0 0 0 4 4 4 8 8 8
0 0 0 4 5 5 8 9 10
0 0 0 4 5 6 8 9 10
横向背包容量,纵向分别对应每个物品。