1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5 const int b=6;//进制
 6 int B[15];
 7 int mapp[1010];// id 映射
 8 int val[200];// 价值
 9 int cost[200];// 花费
10 int dp[66666];//状态下的最小花费
11 int n,m,goal;// goal 最终的状态
12 bool cmp (int x,int y) {
13     for (int i=0;i<n;i++) {
14         int tx=x%b;
15         int ty=y%b;
16         if (tx<ty)  return false;
17         x/=b;
18         y/=b;
19     }
20     return true;
21 }
22 int main ()
23 {
24     ios::sync_with_stdio(false);
25     B[0]=1;
26     for (int i=1;i<=10;i++) B[i]=B[i-1]*b;
27     cin>>n;
28     for (int i=0;i<n;i++) {// 单价也看做是一种更新方案
29         int id,num;
30         cin>>id>>num>>val[i];
31         mapp[id]=i;
32         cost[i]=B[i];// i 从0开始
33         goal+=cost[i]*num;
34     }
35     cin>>m; 
36     for (int i=n;i<n+m;i++) {
37         int t; cin>>t;
38         int state=0;
39         for (int j=1;j<=t;j++) {
40             int id,num;
41             cin>>id>>num;
42             state+=cost[mapp[id]]*num;
43         }
44         cost[i]=state;// 优惠方案的cost 
45         cin>>val[i];
46     }
47     memset (dp,0x3f,sizeof(dp)); dp[0]=0;
48     for (int i=0;i<n+m;i++) 
49         for (int j=cost[i];j<=goal;j++) {
50             if (cmp (j,cost[i]))// 更新的时候 判断各个物品是否大于cost[i](能否更新)
51                 dp[j]=min (dp[j],dp[j-cost[i]]+val[i]);
52         }
53     cout<<dp[goal]<<endl;
54     return 0;
55 }