public class t1_01backpack {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int num=input.nextInt();//物品的数量
int capacity=input.nextInt();//背包的容量
int[] w=new int[num+1];//物品的重量
int[] v=new int[num+1];//物品价值
for (int i = 1; i < num+1; i++) {
w[i]=input.nextInt();
v[i]= input.nextInt();
}
int[] dp=new int[capacity+1];
for (int i = 1; i < num+1; i++) {
for (int j = capacity; j >=0 ; j--) {
if (j>w[i]){
dp[j]=Math.max(dp[j],dp[j-w[i]]+v[i]);
}
}
}
System.out.println(dp[capacity]);
}
}
输出的结果和二维数组的结果不一样,请大佬们看看是哪里的代码出问题了
下面是能输出正确结果的二维数组代码
public class backpack {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int num= input.nextInt();//物品的数量
int capacity= input.nextInt();//背包容量
int[] w=new int[num+1];//物品体积
int[] v=new int[num+1];//物品价值
for (int i=1;i<num+1;i++){
w[i]= input.nextInt();
v[i]= input.nextInt();
}
int[][] dp=new int[num+1][capacity+1];
for (int i = 1; i < num+1; i++) {
for (int j = 1; j < capacity+1; j++) {
if (w[i]>j){
dp[i][j]=dp[i-1][j];
}else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
}
}
}
System.out.println(dp[num][capacity]);
}
}