问题参数
int w[] 物品重量数组
int v[] 物品价值数组
int C 背包最大容量
int n 物品个数
创建一个矩阵 m[n+1][C+1],矩阵代表的每个元素(m[i][j])意义是在背包中物品数为i个、背包最大容量为j时所能达到的最大价值
这里为什么加一是因为要把序号对应上,因为0没有意义
以下为代码实现
public static void bag01(int w[],int v[],int C,int n){
//创建物品在某个重量下获得价值矩阵
int m[][] = new int[n + 1][C + 1];
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= C; j++) {
if (j < w[i])
//背包放不下物品,不放入
m[i][j] = m[i - 1][j];
else {
//背包能放下物品,判断放入该物品和不放入哪个大
m[i][j] = Math.max(m[i - 1][j], m[i - 1][j - w[i]] + v[i]);
}
}
}
}