是要將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]; } }