分组背包
有n组,每一组可选一个物品
每个物品有占空间,和价值两个属性
怎么选让价值最大
也是01背包,怎么理解呢,就是
数据范围
0<N,V≤100
0<Si≤100
0<vij,wij≤100
输入样例
3 5
2
1 2
2 4
1
3 4
1
4 5
输出样例:
8
#include<cstdio>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 1050
int v[N],w[N];
int dp[N];
int s[N];
int main()
{
int n,M,V;
cin>>n>>V;
for(int i=1;i<=n;i++){
cin>>M;
for(int z=0;z<M;z++){
cin>>v[z]>>w[z];
}
int z,j;
for(j=V;j>=0;j--){
for(z=0;z<M;z++){
if(j>=v[z]){
dp[j]=max(dp[j-v[z]]+w[z],dp[j]);
}
}
}
}
cout<<dp[V]<<endl;
return 0;
}