單子 題解 完全揹包問題

2021-10-09 03:05:32 字數 1155 閱讀 1712

傳送門媽咪媽咪哄.

將01揹包中的f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i])

改為f[i][j]=max(f[i][j],f[i][j-k*v[i]]+k*w[i])

這是因為01揹包的每個物品只能選擇乙個,因此選擇放第i件物品就意味著必須轉移到f[i-1][j-v[i]]+w[i]這個狀態;但是完全揹包問題不同,完全揹包如果選擇放第i件物品之後是轉移到f[i][j-k*v[i]]+k*w[i],這是因為完全揹包裡的物品可以用無數次,放了一件i物品還能再放一件。

其他同01揹包媽咪媽咪哄.

#include

using

namespace std;

int m,n;

int dp[

1010][

1010];

int w[

1000000];

int v[

1000000];

//完全揹包

//dp[i][j] -->前i件物品當容量為j時的最大價值

//dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])

intmain()

for(

int i=

1;i<=n;i++)}

} cout<[m];

}

完全揹包優化同01揹包優化一樣都是將二維陣列變為一維陣列

媽咪媽咪哄.

dp[j]=max(dp[j],dp[j-v[i]]+w[i])

注意

這裡有一點與01揹包不同,即第二個迴圈是正序迴圈

**

#include

using

namespace std;

int n,mv;

int f[

1000];

int w[

1000

],v[

1000];

intmain()

如有瑕疵,歡迎來噴qaq

揹包問題(完全揹包)

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...