代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Cutoff{
int k,p;
int id[5],s[5];
}v[110];
struct Good{
int id,s,v;
}a[15];
int pos[1005];
int f[6][6][6][6][6];
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&v[i].k);
for(int j=1;j<=v[i].k;j++){
scanf("%d %d",&v[i].id[j],&v[i].s[j]);
}
scanf("%d",&v[i].p);
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d %d %d",&a[i].id,&a[i].s,&a[i].v);
pos[a[i].id]=i;
}
for(int s1=0;s1<=a[1].s;s1++){
for(int s2=0;s2<=a[2].s;s2++){
for(int s3=0;s3<=a[3].s;s3++){
for(int s4=0;s4<=a[4].s;s4++){
for(int s5=0;s5<=a[5].s;s5++){
f[s1][s2][s3][s4][s5]=s1*a[1].v+s2*a[2].v+s3*a[3].v+s4*a[4].v+s5*a[5].v;
for(int i=1;i<=n;i++){
int t[6]={0};
for(int j=1;j<=v[i].k;j++){
t[pos[v[i].id[j]]]=v[i].s[j];
}
if(s1<t[1]||s2<t[2]||s3<t[3]||s4<t[4]||s5<t[5]){
continue;
}
f[s1][s2][s3][s4][s5]=min(f[s1][s2][s3][s4][s5],f[s1-t[1]][s2-t[2]][s3-t[3]][s4-t[4]][s5-t[5]]+v[i].p);
}
}
}
}
}
}
printf("%d",f[a[1].s][a[2].s][a[3].s][a[4].s][a[5].s]);
return 0;
}
样例4wa了:(