else//當前物品不裝入包,當前包容量下的最大價值仍然是原來的價值
nvaluetable[i][j]=nvaluetable[i-1][j];
} else//包容量不足以裝入當前物品時,沿用原來的包容量最大價值
nvaluetable[i][j]=nvaluetable[i-1][j];
} cout<<"最大值為:"< return nvaluetable[nres][ntotlew];
}; 方式二:採用遞迴方式,遍歷二叉樹,並通過對映表來剪枝。
**如下:
int recursionbag(int nr,int nw)//傳入資源數,包容量
if(nvaluetable[nr][nw]!=0)
if(nw>=nresweight[nr])//包容量大於等於當前物品重
else//包容量不足以放入當前物品
nvaluetable[nr][nw]=recursionbag(nr-1,nw);
return nvaluetable[nr][nw];
} 對比兩種方式可知,第二種方式遍歷的資料量為黃色標註結點,要小於第一種方式的資料訪問量。
不過當節點深度上千後,如果包容量遠小2^n,比如為 10000,這時前一種方法要快得多。估計這時,遞迴對訪問過的節點雖然不再訪問它的子節點,但是這樣重複訪問到的父節點數量過於龐大。
利用動態規劃求解01揹包問題
演算法分析與設計 實驗報告 班級 0209404班 學號 020940410 姓名 楊洲 上機時間 2011 11 7 1 實驗目的與要求 1 掌握動態規劃演算法求解問題的一般特徵和步驟 2 使用動態規劃法程式設計,求解0 1揹包問題。2 實驗題目 利用動態規劃求解0 1揹包問題 3 實驗內容 0 ...
編寫程式,用動態規劃法求解0 1揹包問題
要求 編寫程式,用動態規劃法求解0 1揹包問題。一 實驗目的與要求 1 明確0 1揹包問題的概念 2 利用動態規劃解決0 1揹包問題問題 二 實驗題 0 1揹包問題 knapsack problem 某商店有n個物品,第i個物品價值為vi,重量 或稱權值 為wi,其中vi和wi為非負數,揹包的容量為...
揹包問題的動態規劃法
揹包問題 在m件物品取出若干件放在空間為w的揹包裡,每件物品的重量為w1,w 2 wn,與之相對應的價值為p1,p2 pn。求出獲得最大價值的方案。注意 在本題中,所有的重量值均為整數。演算法分析 對於揹包問題,通常的處理方法是搜尋。用遞迴來完成搜尋,演算法設計如下 function make i ...