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 提高组] 金明的预算方案 - 洛谷



















