遞迴法解決揹包問題

2021-09-03 07:46:37 字數 583 閱讀 7125

演算法思想:

1、如果在某個時刻,選擇的資料項符合目標重量,那麼工作便完成了

2、從選擇的第乙個資料項開始,剩餘的資料量的加和必須符合揹包的目標量減去

第乙個資料項的重量,這是乙個新的目標重量

3、逐個嘗試組合剩餘資料項的可能性,但是注意不要嘗試所有的組合,

因為只要資料項的和大於目標重量的時候,就會停止新增資料

4、如果沒有合適的組合,就放棄第乙個資料,從第二個資料開始嘗試

5、從第三個資料開始,直到嘗試所有的組合

public class knapsack

//找到符合重量的組合

//param total 總重量

//param index 可供選擇的重量下標

public void knapsack(int total,int index)

if(total ==0)

public static void main(string args) ;

int total = 20;

knapsack k = new knapsack(array);

k.knapsack(total, 0);}}

0 1揹包之遞迴法(DFS)

0 1揹包實屬經典問題,經典的解決方法有動態規劃演算法,我用簡單易理解的遞迴解答,主要 如下。注意 對遞迴過程中不必要的 進行剪枝提高效率。dfs 0 1揹包,遞迴法 const int bmaxn 30 揹包容量,最大價值 int n,maxcapacity,maxvalue 0 int weig...

遞迴 遞迴法解決排列問題

方法1 程式大致結構 約定 pl len pl 為最終放置結果的陣列 len為陣列的長度 ele為參與排列的個元素出現的個數 i為pl中下標 假設參與排列的元素有abcd run ele,int i 注意 在遞迴塊內,不應對所傳入的引數進行改變 每個遞迴塊所得到的原始引數應保持一致。舉例 abcde...

0 1揹包問題(遞迴解決)

問題剖析 0 1揹包問題規定每個物品要麼選,要麼不選。因此可以設定物品選擇向量為y y1,y2,yn 那麼當yn 1時,y y1,y2,yn 1 必然為f n 1,c wn 的物品選擇向量,當yn 0時,必然為f n 1,c 的最優物品選擇向量。所以此時可以考慮動態規劃解法。得到根據上面的分析,我們...