回溯法求解0 1揹包問題

2021-10-06 17:41:06 字數 2527 閱讀 8684

#include using namespace std;

struct dot;

void getvalue(int *weight,int *value)

void calculate(int *weight,int *value)

}else

}while(deep == 6)else}}

}int main()

選擇第1個

當前 重量:2值:6

選擇第2個

當前 重量:4值:9

選擇第3個

當前 重量:10值:14

不選擇第4個

當前重量:10值:14

不選擇第5個

當前重量:10值:14

--->回溯到第3層<---

***************====

不選擇第3個

當前重量:4,值:9

選擇第4個

當前 重量:9值:13

不選擇第5個

當前重量:9值:13

--->回溯到第4層<---

***************====

不選擇第4個

當前重量:4,值:9

選擇第5個

當前 重量:8值:15

--->回溯到第5層<---

***************====

不選擇第5個

當前重量:4,值:9

--->回溯到第2層<---

***************====

不選擇第2個

當前重量:2,值:6

選擇第3個

當前 重量:8值:11

不選擇第4個

當前重量:8值:11

不選擇第5個

當前重量:8值:11

--->回溯到第3層<---

***************====

不選擇第3個

當前重量:2,值:6

選擇第4個

當前 重量:7值:10

不選擇第5個

當前重量:7值:10

--->回溯到第4層<---

***************====

不選擇第4個

當前重量:2,值:6

選擇第5個

當前 重量:6值:12

--->回溯到第5層<---

***************====

不選擇第5個

當前重量:2,值:6

--->回溯到第1層<---

***************====

不選擇第1個

當前重量:0,值:0

選擇第2個

當前 重量:2值:3

選擇第3個

當前 重量:8值:8

不選擇第4個

當前重量:8值:8

不選擇第5個

當前重量:8值:8

--->回溯到第3層<---

***************====

不選擇第3個

當前重量:2,值:3

選擇第4個

當前 重量:7值:7

不選擇第5個

當前重量:7值:7

--->回溯到第4層<---

***************====

不選擇第4個

當前重量:2,值:3

選擇第5個

當前 重量:6值:9

--->回溯到第5層<---

***************====

不選擇第5個

當前重量:2,值:3

--->回溯到第2層<---

***************====

不選擇第2個

當前重量:0,值:0

選擇第3個

當前 重量:6值:5

不選擇第4個

當前重量:6值:5

選擇第5個

當前 重量:10值:11

--->回溯到第5層<---

***************====

不選擇第5個

當前重量:6,值:5

--->回溯到第3層<---

***************====

不選擇第3個

當前重量:0,值:0

選擇第4個

當前 重量:5值:4

選擇第5個

當前 重量:9值:10

--->回溯到第5層<---

***************====

不選擇第5個

當前重量:5,值:4

--->回溯到第4層<---

***************====

不選擇第4個

當前重量:0,值:0

選擇第5個

當前 重量:4值:6

--->回溯到第5層<---

***************====

不選擇第5個

當前重量:0,值:0

***************====

搜尋完畢,最大值為15

回溯法求解01揹包問題

在前面文章我們使用動態規劃求解了揹包問題,時間複雜度是o cn 當我們的c的值非常大的時候,說消耗的時間也是非常大的!接下來我們就使用回溯法來求解這個問題,其時間複雜度為o n2n 這個結果當我們的c的值是小於2n 的時候,該演算法所需的時間是小於動態規劃的!既然使用了回溯法,我們就的構造解析樹,因...

0 1揹包問題 回溯法求解

0 1揹包問題 物品總數n,每個物品的體積w i 價值v i 給定揹包的總容量w,求放入揹包中物品的最大價值。用回溯法對0 1揹包問題進行求解,具體思路是 1.使用解空間進行標記每個物品的放入情況,即要建立乙個陣列進行儲存其是否放入,可使用 bool x i 進行標識 2.回溯法第一感覺上是窮舉所有...

演算法實驗 回溯法求解0 1揹包問題

通過剪枝和衝突,走遍所有可能的選擇,最終得到最優解 1 每個節點有兩種選擇方法,依次對所有可能的方法進行遍歷 2 在遍歷的過程中通過設定一全域性變數用來比較所有的解法的結果,最終得到最優解 lagestv 0bestx 1 2 def jianzhi i,n,c,w,ww if i n return...