SC.2 2021-06-19 23:02 采纳率: 0%
浏览 20
已结题

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]);
    }
}
  • 写回答

2条回答 默认 最新

  • 关注
    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的循环改成和下面的一样再运行试试

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月29日

悬赏问题

  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 有关类的报错,在模块里调用另一个模块的方法下的变量时出错
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格
  • ¥15 kali linux用wget archive.kali.org/archive-key.asc指令下载签名无效(失败)
  • ¥15 openHarmony 利用c++程序在dayu210开发板上实现拉取RTSP视频流并且在屏幕上显示
  • ¥15 GD32H757的can通信配置
  • ¥20 nist随机数测试的问题