public class HuiSuBag {
// 回溯算法實現
private static int maxW = Integer.MIN_VALUE; // 結果放到 maxW 中
private int[] weight = {2, 2, 4, 6, 3}; // 物品重量
private int w = 9; // 揹包承受的最大重量
public static void main(String[] args) {
new HuiSuBag().f(0,0);
System.out.println(maxW);
}
public void f(int i, int cw) { // 調用 f(0, 0)
if (cw == w || i == weight.length) { // cw==w 表示裝滿了,i==weight.length 表示物品都考察完了
if (cw > maxW) {
maxW = cw;
}
return;
}
f(i + 1, cw); // 選擇不裝第 i 個物品
if (weight[i] + cw <= w) {
f(i + 1, cw + weight[i]);
}
}
public int dp() {
int[][] dp = new int[weight.length][w + 1];
dp[0][0] = 1;
dp[0][weight[0]] = 1;
for (int i = 1; i < weight.length; i++) {
for (int j = 0; j < w + 1; j++) {
if (dp[i - 1][j] == 1) {
dp[i][j] = 1;
if (j + weight[i] <= w) {
dp[i][j + weight[i]] = 1;
}
}
}
}
int result = 0;
for (int i = w; i >= 0; i--) {
if (dp[weight.length - 1][i] == 1) {
result = Math.max(result, i);
}
}
return result;
}
}
23.01揹包之遞歸回溯&動態規劃
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.