#include
#include
ifstream filein("maxsub.in"); //定义输入文件铭
ofstream fileout("maxsub.out");
char ans[30000],string[101][102];
int len[101];
//dp 的状态转移函数,n为输入的字符串
int get(int n, int * x);
{
int i,ret,index;
for(i=1;i<=n;i++)
if(x[i]==0)
return 0;
for(i=n-1,index=x[n]-1;i>=1;i--)
index = index*len[i]+x[i]-1;
if(ans[index]>=0)
return ans[index];
for(i=2;i<=n;i++)
if(string[1][x[1]-1])!=string[i][x[i]-1])
break;
if(i>n) //全部数组下标减1的规划值
{
int j;
for(j=1;j<=n;j++)
x[j] --;
ret=get(n,x)+1;
for(j=1;j<=n;j++)
x[j]++;
}else{
ret = 0 ; //有不等,为下标各减1之后的最大值
for(i=1;i<=n;i++)
{
x[i]--;
int rem = get(n, x);
if(rem > ret)
ret = rem;
x[i]++;
}
}
ans[index] = ret;
return ret; //
}
void mian()
{
fint i,j,n,temp[101];
filein>>t;
for(i=1;i<=t;i++)
{
memset(ans , 0xff, sizeof(ans)); //初始化状态表示为-1
filein>>n;
for(j=1;j<=n;j++)
{
filein>>string[j];
temp[j]=len[j]=(int)strlen(string[j]);
}//读入字符串
fileout< }
}
阅读(864) | 评论(0) | 转发(0) |