揹包問題彙總2(分組揹包,揹包問題求方案數)

2021-10-01 19:25:42 字數 1809 閱讀 4097

揹包問題上加一層迴圈就可以了,最外層控制第幾組,最內層迴圈依此遍歷第i組所有物品的資訊。

樣例題目:

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

每組物品有若干個,同一組內的物品最多只能選乙個。

每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。

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

輸出最大價值。

輸入格式

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

接下來有 n 組資料:

每組資料第一行有乙個整數 si,表示第 i 個物品組的物品數量;

每組資料接下來有 si 行,每行有兩個整數 vij,wij,用空格隔開,分別表示第 i 個物品組的第 j 個物品的體積和價值;

輸出格式

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

資料範圍

0**

#include

using

namespace std;

int n;

int v;

int dp[

110]

;int tiji[

110]

[110];

int jiazhi[

110]

[110];

int s[

110]

;int

main()

}for

(int i=

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

}

cout<

}

例題

有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。

第 i 件物品的體積是 vi,價值是 wi。

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

輸出 最優選法的方案數。注意答案可能很大,請輸出答案模 109+7 的結果。

輸入格式

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

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

輸出格式

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

資料範圍

0分析

列舉每個體積所對應價值的方案數即可,注意cnt陣列對應每個體積要初始化為1,因為什麼物品也不放也是一種方案,當選第i個物品和不選第i個物品價值相同,則方案數改變。

**

#include

using

namespace std;

const

int n =

1010

;const

int mod =

1e9+7;

int n,v;

int tiji[n]

,jiazhi[n]

;int cnt[n]

;int dp[n]

;int

main()

for(

int i=

0;i<=v;i++

)for

(int i=

1;i<=n;i++

)else

if(value==dp[j])}

}// for(int i=1;i<=v;i++) cout

}

揹包問題克星 分組揹包

有n件物品,告訴你這n件物品的重量以及價值,將這些物品劃分為k組,每組中的物品互相衝突,最多選一件,求解將哪些物品裝入揹包可使這些物品的費用綜合不超過揹包的容量,且價值總和最大。演算法 首先判斷乙個分組當中的一件物品,同01揹包一樣,此物品存在兩種狀態,取與不取,若取此物品,則繼續判斷下一組的第一件...

分組揹包 Acwing 9 分組揹包問題

題目鏈結 有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空格隔...

分組揹包問題

有 n nn 組物品和乙個容量是 v vv 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij v vi j 價值是 wij w wi j 其中 i ii 是組號,j jj 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸...