01揹包路徑回溯

2022-09-17 08:51:14 字數 798 閱讀 3677

以此題為例

01揹包有選取和不選取兩種操作,每次記錄選取的操作在乙個新的陣列中。

回溯時則減下每次加上的,就是過來時的路徑。

1 #include 2

using

namespace

std;

3#define n 37

4intn;5

int p[40],a[40],c[40],m[40],g[40];6

intp,a,c,m;

7short

dp[n][n][n][n];

8bool

tk[n][n][n][n][n];

9int

main()

1015 scanf("

%d %d %d %d

",&p,&a,&c,&m);

16for (int i = 1; i <=n ; ++i) 26}

27}28}

29}30}

31 vectorans;

32for(int i=n; i>0; --i)

37if(p<0 || a<0 || c<0 || m<0) break;38

}39 printf("

%d\n

",(int

)ans.size());

40sort(ans.begin(),ans.end());

41for(auto i : ans) printf("

%d\n

", i);

42return0;

43 }

回溯 0 1揹包問題

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

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到...