1 #include<iostream>
2 #include<cstdlib>
3 #include<cstdio>
4 #include<cstring>
5 #include<queue>
6 #include<algorithm>
7 #include<cmath>
8 using namespace std;
9 int t,n,ans=0x7fffffff;
10 int sum[14],la[14],num[5];
11 void dfs6(int js){
12 if(js>=ans)return;
13 int jj=0;
14 for(int i=4;i>=1;i--)
15 jj+=num[i];
16 ans=min(ans,jj+js);
17 return;
18 }
19 void dfs5(int js,bool pd){ //3 _
20 if(js>=ans)return;
21 int nn[5];
22 memcpy(nn,num,sizeof(num));
23 if(!pd)
24 {
25 for(int i=num[3];i>=1;i--)
26 {
27 if(num[2]>=i)
28 {
29 memcpy(num,nn,sizeof(num));
30 num[3]-=i;
31 num[2]-=i;
32 dfs5(js+i,1);
33 memcpy(num,nn,sizeof(num));//记得还原,否则判断num[]将会失误。下同。
34 }
35 }
36 }
37 for(int i=num[3];i>=1;i--)
38 {
39 if(num[1]>=i)
40 {
41 memcpy(num,nn,sizeof(num));
42 num[3]-=i;
43 num[1]-=i;
44 dfs6(js+i);
45 memcpy(num,nn,sizeof(num));
46 }
47 }
48 memcpy(num,nn,sizeof(nn));
49 dfs6(js);
50 }
51 void dfs4(int js,bool pd){ //4 2
52 if(js>=ans) return;
53 int nn[5];
54 if(!pd)
55 {
56 memset(num,0,sizeof(num));
57 for(int i=1;i<=13;i++) num[la[i]]++;
58 memcpy(nn,num,sizeof(num));
59 for(int i=num[4];i>=1;i--)
60 {
61 if(num[2]>=i*2)
62 {
63 memcpy(num,nn,sizeof(nn));
64 num[4]-=i;
65 num[2]-=i*2;
66 dfs4(js+i,1);
67 memcpy(num,nn,sizeof(nn));
68 }
69 }
70 }
71 if(pd) memcpy(nn,num,sizeof(num));
72 for(int i=num[4];i>=1;i--)
73 {
74 if(num[1]>=i*2)
75 {
76 memcpy(num,nn,sizeof(nn));
77 num[4]-=i;
78 num[1]-=i*2;
79 dfs5(js+i,0);
80 memcpy(num,nn,sizeof(nn));
81 }
82 }
83 memcpy(num,nn,sizeof(nn));
84 dfs5(js,0);
85 }
86 void dfs3(int js){ //1s
87 if(js>=ans) return;
88 int ll[14];
89 memcpy(ll,la,sizeof(la