觉得自己真是猪脑壳。。。
数据很小,所以可以考虑暴力。
枚举出现同花顺的每种情况,然后与输入的数据进行比较,找两者的交集。恩。
然后之前想得好复杂。。用什么DP,,什么奇技淫巧。。我是傻逼。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string a[10],s[10];
string cal(int x)
{
string tmp="";
if(x<10) return tmp='0'+x;
if(x<14)
{
tmp=x/10+'0';
tmp+=x%10+'0';
return tmp;
}
return tmp="1";
}
int cmp()
{
int ans=0;
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
if(a[j]==s[i]) {ans++;break;}
}
}
return ans;
}
int work()
{
int ans=0;
for(int i=0;i<4;i++)
{
for(int j=1;j<=10;j++)
{
s[0]="";
s[0]+='A'+i;
s[0]+=cal(j);
for(int k=1;k<5;k++)
{
s[k]="";s[k]+='A'+i;
s[k]+=cal(j+k);
}
//debug
//for(int k=0;k<5;k++) cout<<s[k]<<" ";cout<<endl;
ans=max(ans,cmp());
}
}
return 5-ans;
}
int main()
{
int T;
for(cin>>T;T>0;T--)
{
cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4];
sort(a,a+5);
cout<<work()<<endl;
}
return 0;
}