问题描述:
解题思路:
分组背包模板题,与优化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;
}
知识点:分组背包