有n个物品,每个物品的重量放在数组weight[]中,每个物品对应的价值放在数组value[]中
有一个背包,容量为target,往背包里装上述n个物品,背包能容纳的最大价值
思路:对于每一个物品,要么装入背包,要么不装入背包
对于第i个物品,如果它的重量weight[i-1]小于等于背包的容量,它才有可能被装入,如果weight[i-1]大于等于背包的容量,不可能被装入
创建一个二维数组int[][] m = new int[n+1][target+1];,m[i][j]表示,对于第i个物品,当背包容量为j时,获得的最大价值
public static int ZeroOnePackage2(int []value, int[] weight, int target){ int max = 0; if(value!=null && value.length>0 && weight!=null && weight.length>0 && weight.length == value.length && target>0){ int n = value.length; int[][] m = new int[n+1][target+1]; for(int i=1;i<=n;i++){ for(int j=1;j<=target;j++){ if(weight[i-1] > j){ m[i][j] = m[i-1][j]; }else{ m[i][j] = Math.max(m[i-1][j], m[i-1][j-weight[i-1]]+value[i-1]); } if(max>m[i][j]){ max = m[i][j]; } } } for(int i=0;i<m.length;i++){ for(int j=0;j<m[i].length;j++){ System.out.print(m[i][j]+" "); } System.out.println(); } } return max; }