0 1揹包問題(回溯)

2021-08-28 08:23:15 字數 652 閱讀 8030

描述

需對容量為c 的揹包進行裝載。從n 個物品中選取裝入揹包的物品,每件物品i 的重量為wi ,價值為pi 。對於可行的揹包裝載,揹包中物品的總重量不能超過揹包的容量,最佳裝載是指所裝入的物品價值最高。

輸入多個測例,每個測例的輸入佔三行。第一行兩個整數:n(n<=10)和c,第二行n個整數分別是w1到wn,第三行n個整數分別是p1到pn。

n 和 c 都等於零標誌輸入結束。

輸出每個測例的輸出佔一行,輸出乙個整數,即最佳裝載的總價值。

輸入樣例

1 21

12 3

2 23 4

0 0輸出樣例14

#includeusing namespace std;

int n,c; //記錄物品數及揹包容量

int w[10] = ,v[10] = ; //記錄物品重量和價值

int weight,value,vt; //記錄總重量和總價值(以及臨時價值)

void search(int m);

int main()

return 0;

}void search(int m)

else

search(m+1);

if(i == 1)

}}}

回溯 0 1揹包問題

回溯演算法的要點 1,針對所給問題,定義問題的解空間。2,確定容易搜尋的解空間的組織結構。3,通過剪枝優化搜尋過程。下面通過求解0 1揹包問題來分析使用回溯演算法的過程 1,根據問題的描述,設所有的物件數是n,對應的重量和價值分別為w 0 n 1 和v 0 n 1 於是這個問題就轉化成在這n件物件中...

回溯 01揹包問題

這裡再簡單寫一下問題要求 給定n中物品和乙個容量為c的揹包,物品i的重量為wi,其價值為vi,0 1揹包問題是如何選擇裝入揹包的物品 物品不可分割 使得裝入揹包的物品的價值為最大。1.題目分析 考慮到每種物品只有2 種選擇,即裝入揹包或不裝入揹包,並且物品數和揹包容量已給定,要計算裝入揹包物品的最大...

01揹包問題(回溯)

回溯法求解0 1揹包問題 問題描述 略 解題分析 確定約束函式和限界函式 約束函式 cw i w i total weight 重量 限界函式 b i cv i r i 價值 解空間組織 樹或圖 樹結構 子集樹 排列樹 搜尋方式 深度優先演算法的核心 回溯函式 限界函式,其中約束函式沒有單獨寫出來,...