w是重量,v是价值,每组选且只选一个,可以不选。
我这个代码是每组都选的情况,
目前主要的问题是某一组如果不选怎么改?
#include<bits/stdc++.h>
using namespace std;
int n,V,s[108],ans;
struct node{
vector<int> w,v;
}a[108];
int dp[1008];
int main(){
scanf("%d%d",&n,&V);
for(int i=1;i<=n;i++){
scanf("%d",&s[i]);
for(int j=1;j<=s[i];j++){
int w1,v1;
scanf("%d%d",&w1,&v1);
a[i].w.push_back(w1);
a[i].v.push_back(v1);
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<s[i];j++){
for(int k=V;k>=a[i].w[j];k--){
dp[k]=max(dp[k],dp[k-a[i].w[j]]+a[i].v[j]);
}
}
}
printf("%d\n",dp[V]);
return 0;
}