0-1揹包

問題描述:

給定n種物品和一揹包。物品i的重量是wi,其價值爲vi,揹包容量爲c。問應如何選擇裝入揹包中的物品,使得裝入揹包中物品的總價值最大。在選擇裝入揹包的物品時,對每種物品i只有兩種選擇,即裝入揹包或不裝入揹包。不能將物品i裝入揹包多次,也不能只裝入部分的物品i。因此,該問題稱爲0-1揹包問題。

 

DP思想:

首先物品個數爲n個, 包總容量爲c, 其中w[],v[]分別爲n個物品的重量、價格。表m(i,j)表示從第i個物品開始容量爲j的包的最大價值量。具體流程如下:

1. 初始化,當i=n-1時,若c>=w[i],則m(i,c)=v[i];若0<=j<w[i],則m(i,c)=0
2. 當0<=i<n-1時,若j>=w[i],則m(i,j)=max{ m(i+1,j), m(i+1,j-w[i])+v[i] };若0<=j<w[i],則m(i,j)=m(i+1,j)

 

 

C++源碼:

 

運行結果:

0-1

 

 

發佈了42 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章