分組揹包問題

2022-09-19 19:27:10 字數 668 閱讀 3066

問題描述:

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

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

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

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

分析:f[i][j]表示只看前i的情況下,揹包中物品最大體積為j時揹包最大價值;

跟0 ~ 1揹包問題思路差不多,無非是多了一層組內迴圈來求組內最大價值。

示例**:

#include using namespace std;

const int n = 105;

int n, m;

int s[n], v[n][n], w[n][n], f[n];

int main()

}for(int i = 1; i <= n; i ++)

for(int j = m; j >= 0; j --)

for(int k = 1; k <= s[i]; k ++)

if(v[i][k] <= j)

f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);

printf("%d", f[m]);

return 0;

}

分組揹包問題

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

分組揹包問題

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

分組揹包問題

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