0 1揹包之遞迴法(DFS)

2021-08-16 04:58:09 字數 695 閱讀 1308

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