回溯法解決0 1揹包問題

2022-09-19 01:09:12 字數 933 閱讀 6646

0-1揹包問題指的是有乙個能裝w重的揹包,和n個不同重量的物體,如何選擇物體才能盡可能地裝滿揹包。

public

int maxw = integer.min_value; //

儲存揹包中物品總重量的最大值

//cw表示當前已經裝進去的物品的重量和;i表示考察到哪個物品了;

//w揹包重量;items表示每個物品的重量;n表示物品個數

//假設揹包可承受重量100,物品個數10,物品重量儲存在陣列a中,那可以這樣呼叫函式:

//f(0, 0, a, 10, 100)

public

void f(int i, int cw, int items, int n, int

w) f(i+1, cw, items, n, w);//

不選擇放這個物體

f(i+1,cw + items[i], items, n, w);//

選擇放這個物體

}

這裡還可以在優化一下,當cw+items[i]>w時就可以不用再遞迴了。

public

int maxw = integer.min_value; //

儲存揹包中物品總重量的最大值

//cw表示當前已經裝進去的物品的重量和;i表示考察到哪個物品了;

//w揹包重量;items表示每個物品的重量;n表示物品個數

//假設揹包可承受重量100,物品個數10,物品重量儲存在陣列a中,那可以這樣呼叫函式:

//f(0, 0, a, 10, 100)

public

void f(int i, int cw, int items, int n, int

w) f(i+1

, cw, items, n, w);

if (cw + items[i] <= w)

}

回溯法解決0 1揹包問題

1.回溯法可以看作是窮舉法的一種實現方式 2.基本過程 每一步只生成解的一部分 部分解 並立即對該部分解進行評估,若有可能擴充套件成為 所求解 則繼續擴充套件,得到新的部分解,泛指嘗試其他部分解,知道窮盡所有可能.3.解空間 所有的可能的解的集合 解空間樹 將解空間組織成樹形成的樹形結構 常見的解空...

回溯法解決01揹包問題

一 問題描述 有n 個物品,它們有各自的重量和價值,現有給定容量的揹包,如何讓揹包裡裝入的物品具有最大的價值總和?二 總體思路 因為回溯求解的規則是 後進先出 所以要用棧來存放符合條件的解,在儲存過程中用陣列來存放各個物品的體積和價值,然後用深度優先搜尋的方式求解,最後得到符合條件的最優解並輸出。三...

回溯法解決0 1揹包問題

問題描述 有n件物品和乙個容量為 c的揹包。第 i件物品的價值是 v i 重量是 w i 求解將哪些物品裝入揹包可使價值總和最大。所謂01揹包,表示每乙個物品只有乙個,要麼裝入,要麼不裝入。回溯法 01揹包屬於找最優解問題,用回溯法需要構造解的子集樹。在搜尋狀態空間樹時,只要左子節點是可乙個可行結點...