Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1528

View Code
 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 const int N=30;
 5 int a[N],e[N],n;
 6 int mat[N];
 7 bool vis[N];
 8 int val(char *c)
 9 {
10     int s=0;
11     if('2'<=c[0] && c[0]<='9') s=c[0]-'0';
12     else switch(c[0])
13     {
14         case 'T': s=10; break;
15         case 'J': s=11; break;
16         case 'Q': s=12; break;
17         case 'K': s=13; break;
18         case 'A': s=14; break;
19     }
20     s*=4;
21     switch(c[1])
22     {
23         case 'C': s+=0; break;
24         case 'D': s+=1; break;
25         case 'S': s+=2; break;
26         case 'H': s+=3; break;
27     }
28     return s;
29 }
30 bool find(int u)
31 {
32     for(int v=0;v<n;v++)
33         if(e[u]>a[v] && !vis[v])
34         {
35             vis[v]=1;
36             if(mat[v]==-1 || find(mat[v]))
37             {
38                 mat[v]=u;
39                 return 1;
40             }
41         }
42     return 0;
43 }
44 int maxmatch()
45 {
46     int cnt=0;
47     memset(mat,-1,sizeof(mat));
48     for(int i=0;i<n;i++)
49     {
50         memset(vis,0,sizeof(vis));
51         if(find(i)) cnt++;
52     }
53     return cnt;
54 }
55 int main()
56 {
57     int T;
58     scanf("%d",&T);
59     while(T--)
60     {
61         scanf("%d",&n);
62         for(int i=0;i<n;i++)
63         {
64             char c[5];
65             scanf("%s",c);
66             a[i]=val(c);
67         }
68         for(int i=0;i<n;i++)
69         {
70             char c[5];
71             scanf("%s",c);
72             e[i]=val(c);
73         }
74         int ans=maxmatch();
75         printf("%d\n",ans);
76     }
77     return 0;
78 }

 

posted on 2012-04-19 14:19  Qiuqiqiu  阅读(172)  评论(0编辑  收藏  举报