記一個坑-----遍歷數組時,判斷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];
            }
        }
相關文章
相關標籤/搜索