01背包一维数组代码

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]);
    }
}

 

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]);
                 }
            }
        }

这里j的循环改成和下面的一样再运行试试

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632