對於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...