揹包問題(二) 完全揹包問題

2021-08-20 10:35:27 字數 1027 閱讀 3901

繼0_1揹包問題後,本文介紹完全揹包問題

0_1揹包問題見:

完全揹包問題與01揹包問題的區別在於每一件物品的數量都有無限個,而01揹包每件物品數量只有乙個。

問題解法其實和01揹包問題一樣,只是初始化的值和遞推公式需要稍微變化一下。初始化時,當只考慮一件物品a時,f[1][j] = j/weight[a]。 遞推公式計算時,f[i][y] = max,注意這裡當考慮放入乙個物品 i 時應當考慮還可能繼續放入 i,因此這裡是f[i][y-weight[i]]+value[i], 而不是f[i-1][y-weight[i]]+value[i]。

考慮如下實際問題:

物品標號與價值    v[1]=1;v[2]=3;v[3]=5;v[4]=9;

物品標號與重量     w[1]=2,w[2]=3;w[3]=4;w[4]=7;

揹包總的重量限制    b=10;

演算法**:

#include #include #include using namespace std;

const int n = 150;

int v[n] = ;

int w[n] = ;

int x[n];

int m[n][n];

int c = 10;

int n = 4;

/*********************追蹤具體裝了哪件物品,各裝了幾件*********/

void traceback(int j,int y,int f[n][n])

j--; }}

int main()

} /*****************列印顯示下m[i][j]的內容**************/

揹包問題(二) 完全揹包問題

之前我們已經介紹了0 1揹包問題,現在我們以洛谷p1616為例,介紹一下完全揹包問題 完全揹包問題就是將0 1揹包問題中的每樣物品只能拿一次這個限制條件去掉,每樣物品可以無限次裝入。對於完全揹包的圖形解釋,我擷取 leetcode 101 內的解釋展現出來 簡要說一下推導過程 因為我們可以多次拿取物...

揹包問題(完全揹包)

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

揹包問題(0 1揹包 完全揹包)

0 1揹包 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。重要的點在於 每種物品僅有一件,可以選擇放 不放子問題 f i v 表示前i件物品恰好放入乙個 容量為v 的揹包可以獲得的最大價值。狀態轉移方程 遞推式 f i v max 考...