演算法思想:
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 的最優物品選擇向量。所以此時可以考慮動態規劃解法。得到根據上面的分析,我們...