问题描述:
解题思路:
分组背包模板题,与优化01背包的不同之处在于第一维不可省略,要写s循环。注意要初始化
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 9;
int dp[N][N];
// 分组背包模板,第一维不能优化掉
int main()
{
int N, V;cin >> N >> V;
for(int i = 1; i <= N; i++)
{
int s;cin >> s;
for(int j = 0; j <= V; j++)dp[i][j] = dp[i - 1][j]; // 要初始化
while(s--) // 要循环算每一组
{
int w, v; cin >> w >> v;
for(int j = w; j <= V; j++)
{
dp[i][j] = max(dp[i][j], dp[i - 1][j - w] + v); // i - 1
}
}
}
cout << dp[N][V] << '\n';
return 0;
}
知识点:分组背包