基本公式:
if (背包体积j小于物品i的体积)
array[i][j] = array[i-1][j] //背包装不下第i个物体,最优解为前i个物体的解
else
array[i][j] = max(array[i-1][j], array[i-1][j-Vi] + Wi)
public static void getkanpsack(int[] w,int v[],int n,int c)
{
int[][] array = new int[n+1][c+1];
for (int i=0;i<c+1;i++)
array[0][i] = 0; // 第一行初始为0
for (int i = 0;i<n+1;i++)
array[i][0] = 0; // 第一列初始为0
for(int i=1;i<n+1;i++){
for(int j=1;j<=c;j++){
if (j<w[i])
array[i][j] = array[i-1][j]; // 公式一
else {
array[i][j] = max(array[i-1][j],array[i-1][j-w[i]]+v[i]); //公式二
}
}
}
// 打印二维列表
for (int i=0;i<n+1;i++){
for (int j=0;j<c+1;j++){
System.out.printf("% 4d",array[i][j]);
// System.out.printf("Tab键的效果是:% 8d%n", 7);
}
System.out.println();
}
}
public static int max(int x,int y)
{
return x > y ? x : y;
}