0-1揹包實屬經典問題,經典的解決方法有動態規劃演算法,我用簡單易理解的遞迴解答,主要**如下。
注意:對遞迴過程中不必要的**進行剪枝提高效率。
//dfs
//0-1揹包,遞迴法
const int bmaxn = 30;
//揹包容量,最大價值
int n,maxcapacity,maxvalue = 0;
int weight[bmaxn],value[bmaxn];
void bag(int index,int vsum,int wsum)
//找下乙個物品,且不要
bag(index+1,vsum,wsum);
//找下乙個物品,要了
//為了提高演算法效率,我們要過濾不必要的遞迴
//不光沒超重
if(wsum + weight[index] <= maxcapacity)
bag(index+1,vsum+value[index],wsum+weight[index]); }}
//input 0-1 bag data
void inputbag(){
printf("輸入物品數,揹包容量:\n");
scanf("%d%d",&n,&maxcapacity);
printf("輸入各物品重量:\n");
for(int i = 0;i
遞迴法解決揹包問題
演算法思想 1 如果在某個時刻,選擇的資料項符合目標重量,那麼工作便完成了 2 從選擇的第乙個資料項開始,剩餘的資料量的加和必須符合揹包的目標量減去 第乙個資料項的重量,這是乙個新的目標重量 3 逐個嘗試組合剩餘資料項的可能性,但是注意不要嘗試所有的組合,因為只要資料項的和大於目標重量的時候,就會停...
01揹包 (遞迴解決)
01揹包,設定乙個揹包,他有乙個maxweight,現在你有n個物品,每個物品都有重量與其價值,現在要你求取得的最大價值。運用遞迴的思想,假如現在是從最後乙個開始選,如果這個東西的重量大於揹包的重量,那是不是可以從第n 1個物體開始選。假如這個東西的重量小於揹包的重量,那麼現在你將面臨兩個選擇,一不...
DFS解決01揹包問題
本篇博文著重用dfs解決著名的揹包問題 01揹包問題要點在 選與不選。所以我們很容易聯想到dfs來解決這個問題!下面我們來看看是如何實現的 includeusing namespace std const int n 30 int w n value n n,maxvalue 0,v void df...