分组背包问题
作者:
jy9
,
2024-10-01 15:31:13
,
所有人可见
,
阅读 1
#include <iostream>
#include <vector>
#include <limits.h>
using namespace std;
const int N = 110;
int n, V;
int nn;
int vi, wi;
struct node{
int v, w;
};
vector<node> h[N];
int dp[N];
int main(){
cin >> n >> V;
for(int i = 1; i <= n; i++){
cin >> nn;
for(int j = 1; j <= nn; j ++){
cin >> vi >> wi;
h[i].push_back({vi, wi});
}
}
for(int i = 1; i <= n; i++){
for(int j = V; j >= 0; j--){
for(auto [v, w]:h[i]){ //决策
if(v <= j) dp[j] = max(dp[j], dp[j-v]+w);
}
}
}
cout << dp[V];
return 0;
}