0 1揹包問題使用回溯法

2021-07-24 18:33:18 字數 593 閱讀 8603

對於0-1 揹包問題可以用動態規劃演算法解決,這裡先不說這種方法。

只介紹回溯法,0-1揹包問題的回溯法解決的解空間是子集樹。

下面給出最簡潔的**,比較方便理解呢

#include #includeusing namespace std;

int n,c,bestp;//物品的個數,揹包的容量,最大價值

int p[10000], //物品的價值

w[10000], //物品的重量

x[10000], //x[i]暫存物品的選中情況

bestx[10000]; //物品的選中情況

void backtrack(int i,int cp,int cw)

}else

for(j=0; j<=1; j++)

}}int main()

輸入資料及結果輸出放下面

使用回溯法解決0 1揹包問題

使用迭代進行樹的搜尋,含有限界函式在每次迭代前進行判斷。result list 執行次數 times 0 判斷是否可行 defworkable result list weight list list bag int weight 0for index,value in enumerate resu...

使用回溯演算法解決 0 1 揹包問題

對於 0 1 揹包問題,我們最高效的方法是使用動態規劃來解決,但其實我們使用回溯演算法也可以解決0 1揹包問題 問題描述 我們有乙個揹包,揹包可承載的重量是wkg。現在我們有n個物品,每個物品的重量不等,並且不可分割,我們現在期待選擇幾件物品裝載到揹包中,在不超過揹包重量的前提下如何讓揹包中物品的總...

回溯法 0 1揹包問題

0 1揹包問題 給定n種物品和一揹包.物品i的重量是wi,其價值為ui,揹包的容量為c.問如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?分析 0 1揹包是子集合選取問題,一般情況下0 1揹包是個np問題.第一步 確定解空間 裝入哪幾種物品 第二步 確定易於搜尋的解空間結構 可以用陣列p,w...