這是0-1揹包問題的實現。問題聲明如下所示:使用Java迭代2D數組8
給出了兩個數組,一個包含一組項目的權重,另一個包含各權值的值。你提供了一個最大重量。在限制最大重量的情況下,通過選擇或不選擇項目組來確定可以獲得的最大值。 值和權重列表將始終具有相同的大小。
這是我的解決方案,它通常工作正常(不在邊緣情況下)。
public static int getCombination(int[] weights, int[] values, int maxWeight){
int[][] memo = new int[weights.length][maxWeight + 1];
for (int i = 0; i < memo.length; i++) {
for(int j=0; j < memo[i].length; j++){
if(j == 0){
memo[i][j] = 0;
}else if(weights[i] > j){
if(i == 0) memo[i][j] = 0;
else memo[i][j] = memo[i-1][j];
}else{
if(i == 0){
memo[i][j] = values[i];
}
else{
memo[i][j] = Integer.max((values[i] + memo[i-1][j- weights[i]]), memo[i-1][j]);
}
}
}
}
return memo[weights.length -1][maxWeight];
}
現在我想用Java 8 Streams和lambdas以聲明方式重寫這個完整的邏輯。有人可以幫助我。
當然。你嘗試了什麼? – Eugene
我試着使用flatMaps迭代循環,但是這並沒有真正的幫助,因爲我努力訪問索引值正在填充備忘錄。關鍵在於,我不知道如何開始。 –