其实这个题就是分组背包的模板题。要不是当时SB,把变量弄错,就A了,还是没有真正的理解分组背包。。
#include<iostream>
#include<algorithm>#include<cstring>
#include<vector>
#include<cstdio>
#define MAXK 11
#define INF -0x7fffffff
using namespace std;
int d[1009];
struct sneak
{
int c,w;
};
vector<sneak>s[100];
int main()
{
//freopen("date.in","r",stdin);
int N,V,K,i,j,k;
int M,T;
int O;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&K,&V);
for(i=0; i<K; i++)
s[i].clear();
sneak t;
for(i=0; i<K; i++)
{
scanf("%d",&O);
for(int j = 0; j<O; j++)
{
scanf("%d %d",&t.c,&t.w);
s[i].push_back(t);
}
}
memset(d,0,sizeof(d));
for(i=0; i<K; i++)//种类
for(k=V; k>=1; k--)//体积
for(j=0; j<s[i].size(); j++)//数量
if(k - s[i][j].c>=0)
d[k]=max(d[k],d[k-s[i][j].c]+s[i][j].w);
printf("%d\n",d[V]);
}
return 0;
}