以此題為例
01揹包有選取和不選取兩種操作,每次記錄選取的操作在乙個新的陣列中。
回溯時則減下每次加上的,就是過來時的路徑。
1 #include 2using
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到...