记一个坑-----遍历数组时,判断i>0要放在前面,放在后面提示 永远为真

问题描述

是要将0-1背包问题动态规划后,回溯找出放在背包里的物品java

一开始代码是这样数组

for (int i=n, j=m ;i>0;i--){
            while (arr[i][j]==arr[i-1][j]){
                    i--;
            }
            if ( arr[i][j]==arr[i-1][j-weight[i-1]]+value[i-1]){
                System.out.println("背包内存放第"+i+"号物品");
                j = j-weight[i-1];
            }
        }

以后报错数组越界 -1,想了下发现是没有添加 判断i>0,因而改为了spa

for (int i=n, j=m ;i>0;i--){
            while (arr[i][j]==arr[i-1][j]&&i>0){
                    i--;
            }
            if ( arr[i][j]==arr[i-1][j-weight[i-1]]+value[i-1]&&i>0){
                System.out.println("背包内存放第"+i+"号物品");
                j = j-weight[i-1];
            }
        }

此时提示code

最后明白了 在第一步blog

arr[i][j]==arr[i-1][j]时,若是i=0时 就已经错,后面的i>0没有起到检验的做用,因此要把i>0添加到前面,即内存

for (int i=n, j=m ;i>0;i--){
            while (i > 0 &&arr[i][j]==arr[i-1][j]){
                    i--;
            }
            if (i > 0 && arr[i][j]==arr[i-1][j-weight[i-1]]+value[i-1]){
                System.out.println("背包内存放第"+i+"号物品");
                j = j-weight[i-1];
            }
        }
相关文章
相关标签/搜索