1、B站视频链接:E16 背包DP 分组背包_哔哩哔哩_bilibili
#include <bits/stdc++.h>
using namespace std;
const int N=110;
int v[N][N],w[N][N],s[N];
// v[i,j]:第i组第j个物品的体积 s[i]:第i组物品的个数
int f[N][N];
// f[i,j]:前i组物品,能放入容量为j的背包的最大值
int main(){
int n,V;cin>>n>>V;
for(int i=1;i<=n;i++){
cin>>s[i];
for(int j=1;j<=s[i];j++){
cin>>v[i][j]>>w[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=V;j++){
for(int k=0;k<=s[i];k++){
if(j>=v[i][k]){
f[i][j]=max(f[i][j],f[i-1][j-v[i][k]]+w[i][k]);
}
}
}
}
cout<<f[n][V];
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N=110;
int f[N],v[N],w[N];
int main(){
int n,V,s;cin>>n>>V;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=1;j<=s;j++){
cin>>v[j]>>w[j];
}
for(int j=V;j>=1;j--){
for(int k=0;k<=s;k++){
if(j>=v[k])f[j]=max(f[j],f[j-v[k]]+w[k]);
}
}
}
cout<<f[V];
return 0;
}
题目链接:通天之分组背包 - 洛谷
[NOIP2006 提高组] 金明的预算方案 - 洛谷