多重揹包問題1

2021-10-18 21:01:37 字數 1234 閱讀 2632

from acwing 4

時間限制:1s

空間限制:64mb

題目描述:

有 n 種物品和乙個容量是 v 的揹包。

第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。

求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。

輸出最大價值。

輸入格式:

第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。

接下來有 n 行,每行三個整數 vi,wi,si,用空格隔開,分別表示第 i 件物品的體積、價值和數量。

輸出格式:

輸出乙個整數,表示最大價值。

資料範圍:

0 < n,v <= 100

0 < vi,wi,si <= 100

輸入樣例:

4 5

1 2 3

2 4 1

3 4 3

4 5 2

輸出樣例:
10
這個題目可以用乙個dp二維陣列完成,但是,如果進行優化的話,可以將陣列開成一維陣列,對每件商品的操作,從後往前重新整理揹包就可以了。

在01揹包的基礎上,這個題目每種商品可能有多件,比如有三件這種商品,我們就看作是3件不同商品,用01揹包的方法處理。

01揹包問題

一維:

#include

using

namespace std;

int n,v,dp[

105]

;//dp是狀態陣列,表示揹包在某個容量目前能裝下的最多價值

intmain()

cout<;return0;

}

二維:
#include

#include

using

namespace std;

int vi[

10005];

int wi[

10005];

int dp[

10005][

105]

;int

main()

} n = k;

for(

int i =

1; i <= n;i++

)for

(int j =

1;j <= v;j++)}

cout<[v];

return0;

}

多維多重揹包問題 多重揹包問題

悼念512汶川大 遇難同胞 珍惜現在,感恩生活 急!災區的食物依然短缺!為了挽救災區同胞的生命,心繫災區同胞的你準備自己採購一些糧食支援災區,現在假設你一共有資金n元,而市場有m種大公尺,每種大公尺都是袋裝產品,其 不等,並且只能整袋購買。請問 你用有限的資金最多能採購多少公斤糧食呢?後記 人生是乙...

揹包問題 多重揹包

有n種物品和乙個容量為w的揹包。第i種物品最多有n i 件可用,每件重量是w i 價值是v i 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。1.使用三重迴圈進行遞推 狀態轉移式為 dp i j max 關鍵 如下 void solve printf d n dp n ...

多重揹包問題

有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。這題目和完全揹包問題很類似。基本的方程只需將完全揹包問題的方程略微一改即可,因為對於第i種物品有n i 1種策略 取0件,取1件...