01揹包動態規劃

2021-07-10 00:20:52 字數 1250 閱讀 4482

0/1揹包

【問題描述】

乙個旅行者有乙個最多能用

m公斤的揹包,現在有

n件物品,它們的重量

分別是w1,w2

,...,wn,

它們的價值分別為

c1,c2,...,cn.

若每種物品只有一

件求旅行者能獲得最大總價值。

【輸入格式】 w

第一行:兩個整數,

m(揹包容量,

m<=200)和n(

物品數量,

n<=30);

w第2..n+1

行:每行二個整數

wi,ci

,表示每個物品的重量和價值。

【輸出格式】 w

僅一行,乙個數,表示最大總價值。

【樣例輸入】

package.in w

10 4 w

21

w33 w

45

w79

【樣例輸出】

package.out w

12

啊終於到了揹包問題了【淚流滿面啊該來的還是會來】

揹包問題屬於動態規劃,所以 我們用動態規劃來解決最基礎的01揹包問題

首先用f[i][v]表示前i件物品,總重不大於v時的最優解。對於第i件物品,我們可以選擇加上i或者不加上i,如果不加i為最優解的話,那f[i][v]=f[i-1][v]。如果加上i,那麼要考慮此時c[i]要加上的最優解,應當是f[i-1][v-w[i]],這樣才能保證,當加上i物品時,總重仍然不超過v,即

f[i][v]=max(f[i-1][v],f[i-1][v-w[i]]+c[i])

其中v應從m開始迴圈至1,同時要注意v-w[i]>0,否則的話負數會掛(╰_╯)#

附上程式

#include#include#includeusing namespace std;

int m,n,w[31],c[31],f[31][201];

int max(int a,int b)

int main()

printf("%d",f[n][m]);

return 0;

}

揹包是個大坑o(︶︿︶)o唉

動態規劃 01揹包

最優二叉查詢樹.cpp 定義控制台應用程式的入口點。01揹包問題。include stdafx.h include include define n 3 the number of real node define m 10 using namespace std int tmain int arg...

0 1揹包(動態規劃)

題意 有n件物品和乙個容量為v的揹包。第i件物品的體積是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。基本思路 這是最基礎的揹包問題,特點是 每種物品僅有一件,可以選擇放或不放。用子問題定義狀態 即f i v 表示前i件物品恰放入乙個容量為v的揹包可以獲得的最大價值。則其狀態轉移方程...

動態規劃01揹包

01揹包問題簡介 詳細說明 狀態轉移方程詳解 舉例 塊 測試結果 0 1揹包問題 給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?在選擇裝入揹包的物品時,對每種物品i只有兩種選擇,即裝入揹包或不裝入揹包。不能將...