動態規劃之揹包九講之七 揹包問題求方案數

2021-10-05 17:39:01 字數 737 閱讀 2344

題目:有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出 最優選法的方案數。注意答案可能很大,請輸出答案模 1e9+7 的結果。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i 件物品的體積和價值。

輸出格式

輸出乙個整數,表示 方案數 模 1e9+7 的結果。

資料範圍

0解析:求最佳方案數需要乙個陣列 g ,在記錄 f 陣列同時更新 g 陣列,最終遍歷陣列累計答案。

code:

#include

#include

using

namespace std;

const

int n =

1010

, mod =

1e9+

7, inf =

1e6;

int f[n]

, g[n]

;//f[i]:體積恰好是i時最大價值 g[i]:體積恰好是i時方案數

intmain()

}int ans =0;

for(

int j=

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

cout

}

動態規劃之揹包九講之四 混合揹包

題目 有 n 種物品和乙個容量是 v 的揹包。物品一共有三類 第一類物品只能用1次 01揹包 第二類物品可以用無限次 完全揹包 第三類物品最多只能用 si 次 多重揹包 每種體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第...

動態規劃之揹包九講之八 揹包問題求具體方案

題目 有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出 字典序最小的方案。這裡的字典序是指 所選物品的編號所構成的序列。物品的編號範圍是 1 n。輸入格式 第一行兩...

揹包九講之 01揹包

01揹包是最基礎的揹包問題,其中01代表的就是第i個物品的選或不選,在此先設v i 為體積,w i 為價值。很顯然,我們可以使用二位陣列dp i j 來表示前i個物品在揹包容量為j的時候可存放的最大價值。首先dp 0 0 0是很顯然的。而計算dp i j 時,存在01兩種情況 選或不選第i件物品。1...