給定n個物品,重量是,價值是,包的容量(承重)是w
問,放入哪些物品能使得包內價值最大;
1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯
2 定義v[i,j]
表示為,當item取自前i個items且揹包capacity=j 時,揹包問題的最優解,也即最高的價值。
3 從前i個items中,選擇任意乙個組合的情況,可分成兩個子集,一種即包含第i個item的集合,一種即不包含第i個item的集合;我們的最優解,即可從這兩個子集的最優解中比較而得出;
4 無第i個item的最優解,同時capacity=j,自然是v[i-1,j],根據定義可知並不包含第i個item;
5 包含第i個item的最優解,同時capacity=j ,就是在前 i-1 個items的情況下且capacity=j-wi 的最優解(價值)+第i個item(價值),用字母表示為 vi+v[i-1,j-wi]
6 為了使演算法更全面,考慮一種情況,j-wi<0 ,下標會越界,
7 考慮初始狀況,v[0,j]=0 for j>=0 ,v[i,0]=0 for i>=0
動態規劃 揹包問題
不廢話,直接上 動態規劃,揹包問題。輸入為 int n 物品的種類數。int n weight 各件物品的重量。int n value 各種物品的價值。int w 揹包最大的裝載重量。輸出 v n b 的值,最大的裝載價值。x n 各類物品的裝載數量。author huangyongye publi...
動態規劃 揹包問題
1 開心的金明 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每...
動態規劃 揹包問題
define crt secure no warnings include include include include head.h using namespace std const int maxn 100 int dp maxn maxn int w maxn int v maxn voi...