回溯法 01揹包

2022-08-21 05:54:18 字數 815 閱讀 1216

**:

#include using namespace std;

const int m = 100; //設物品最多100個

int n, maxwight, sumvalue;

int wight[m], value[m], ans[m], a[m];

void backtrack(int t, int swight, int svalue)

}else

else //實際重量大於最大重量時,從揹包把物品拿出。}}

}int main()

n 代表的是物品個數

maxwight 揹包能裝的最大體積

sumvalue 物品的最大價值

ans 陣列,最終選擇方式

a 陣列,臨時選擇方式

思路:物品只有兩種選擇,放或者不放,構造二叉樹,n 個物品就是 n 層樹,然後進行最優值更新。

樣例:

圖1揹包構造出的二叉樹如圖1,順序三從右邊到左邊,也就是先不放物品,然後再慢慢放進去。

輸入:3 30

45 25 25

16 15 15

輸出:

0 1 1 :放進後面 2 件物品。 50 : 最大價值

附回溯法搜尋子集樹模板:

void backtrack(int k)}}

01揹包回溯法

計算機演算法基礎 第三版 余祥宣 崔國華 等 華中科技大學出版社 中回溯法解決01揹包問題 演算法思想 基於貪心演算法的回溯演算法 w p陣列是按照效益p w拍好序的陣列 include const int n 8 物品個數 const int m 110 int w n 1 重量陣列,從1開始 i...

0 1揹包(回溯法)

描述 需對容量為c 的揹包進行裝載。從n 個物品中選取裝入揹包的物品,每件物品i 的重量為wi 價值為pi 對於可行的揹包裝載,揹包中物品的總重量不能超過揹包的容量,最佳裝載是指所裝入的物品價值最高。輸入 多個測例,每個測例的輸入佔三行。第一行兩個整數 n n 10 和c,第二行n個整數分別是w1到...

0 1揹包 回溯法

include include include using namespace std define n 100000 int n,c int cp 0,cw 0,bestp 0 cp是當前價值,cw是當前重量,bestp是當前最優值。int w n p n x n bestx n bestx陣列是...