完全揹包問題

2021-10-07 19:35:53 字數 1040 閱讀 3771

完全揹包與01揹包的差別就是完全揹包每樣物品的數量沒有限制

題目鏈結(acwing)

解題思路:

關鍵在於如何讓乙個物品可以被多次選擇,我們用陣列v儲存每個物品的價值,陣列w儲存每個物品的體積。我們可以先思考01揹包是怎麼做到每個物品只能選擇一次的。在01揹包中,我們用一維陣列f儲存前i個物品,體積為1-m的最大價值,遍歷的順序是從後往前(即從m->v[i]),以此保證在計算前i個物品,體積為j的最大價值時,需要用到的資料還未被覆蓋(前i-1個物品,體積小於等於j的最大價值)。因此,當我們計算前i個物品,體積為j時,得到的結果只會包含乙個第i個物品(因為前i個物品,體積為j的結果被計算過後,下一次被使用,只會在計算前i+1個物品的時候)。所以如果我們需要重複使用同乙個物品,我們就得在計算前i個物品的時候,讓前i個物品,體積為j的最大價值能在計算前i個物品的最大價值時再次被使用,這樣計算前i個物品的最大價值時,就可能會包含多個第i個物品。而實現方法就是,從前往後遍歷一位陣列f,這樣本輪(計算前i個物品,體積為1-m的最大價值的過程)的計算就可以用到本輪剛得出的結果(比如計算f[j]時,用到f[j-v[i]],而f[j-v[i]]的情況就是包含第i個物品的,這樣f[j]就會包含兩個以上第i個物品),以此實現乙個物品可以被選擇多次。

**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

1010

;int f[n]

,v[n]

,w[n]

;int n,m;

intmain()

} cout<

}

揹包問題(完全揹包)

1.矩陣鏈乘法 2.投資組合問題 3.完全揹包問題 4.01揹包問題 5.最長公共子串行 乙個揹包,可以放入n種物品,物品j的重量和價值分別為,如果揹包的最大重量限制是b,怎麼樣選擇放入揹包的物品以使得揹包的總價值最大?組合優化問題,設表示裝入揹包的第j個物品的數量,解可以表示為。那麼目標函式和約束...

完全揹包問題

這個是從ppt上弄過來的。完全揹包問題 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。放入第i種物品的耗費的空間是ci,得到的價值是wi。求解 將哪些物品裝入揹包,可使這些物品的耗費的空間總和不超過揹包容量,且價值總和最大 基本思路 這個問題非常類似於01揹包問題,所不同的是每種物品有無限...

完全揹包問題

設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中選取若干件 用乙個物品可以多次選取 使其重量的和小於等於m,而價值的和為最大。輸入有多組資料,對於每組輸入資料第1行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2...