/* ID: yinguan1 PROG: shopping LANG: C++ */ #include <fstream> using namespace std; ifstream fin("shopping.in"); ofstream fout("shopping.out"); int offers; int doffer[105][500]; int offerp[100]; int kind; int buy[5]; int memory[999]; int buy_m[5]; int cnt_=1; int basket[6][6][6][6][6]; int b1,b2,b3,b4,b5; int give_num(int a) { if(memory[a]) return memory[a]; else memory[a]=cnt_; ++cnt_; return memory[a]; } bool core(int y,int a1, int a2, int a3, int a4, int a5) { for(int i=0; i<500; ++i) if(i==a1||i==a2||i==a3||i==a4||i==a5) continue; else if(doffer[y][i]) return false; return true; } void input() { int a, b; fin>>offers; for(int i=0; i<offers; ++i) { fin>>a; for(int j=0; j<a; ++j) { fin>>b; fin>>doffer[i][give_num(b)]; } fin>>offerp[i]; } fin>>kind; for(int i=0; i<kind; ++i) { int c; fin>>c; buy[i]=give_num(c); fin>>buy_m[i]; doffer[offers][buy[i]]=1; fin>>offerp[offers++]; } } void dp() { b1=buy[0],b2=buy[1],b3=buy[2],b4=buy[3],b5=buy[4]; for(int i=0; i<=5; ++i) for(int j=0; j<=5; ++j) for(int k=0; k<=5; ++k) for(int l=0; l<=5; ++l) for(int m=0; m<=5; ++m) basket[i][j][k][l][m]=999999; basket[0][0][0][0][0]=0; for(int s=0; s<offers; ++s) { if(core(s,b1,b2,b3,b4,b5)) for(int i=doffer[s][b1]; i<=buy_m[0]; ++i) for(int j=doffer[s][b2]; j<=buy_m[1]; ++j) for(int k=doffer[s][b3]; k<=buy_m[2]; ++k) for(int l=doffer[s][b4]; l<=buy_m[3]; ++l) for(int m=doffer[s][b5]; m<=buy_m[4]; ++m) { int temp=basket[i-doffer[s][b1]][j-doffer[s][b2]][k-doffer[s][b3]][l-doffer[s][b4]][m-doffer[s][b5]]+offerp[s]; if(temp<basket[i][j][k][l][m]) basket[i][j][k][l][m]=temp; } else continue; } fout<<basket[buy_m[0]][buy_m[1]][buy_m[2]][buy_m[3]][buy_m[4]]<<endl; } int main() { input(); dp(); return 0; }