2016zhangzhongyu 2017-09-15 19:32:09
点我顶贴
收藏
删除
#include<cstdio>
#include<cstring>
int n,m,max=0;
char a[101][101];
bool bz[27];
void dfs(int x,int y,int z)
{
if(z+n-x+1<=max) return;
if(x==n)
{
if(z>max) max=z;
return;
}
for(int i=-1;i<=1;i++)
{
int t1=x+1,t2=y+i;
if(t1>n||t2<1||t2>m) continue;
if(!bz[a[t1][t2]-'A'])
{
bz[a[t1][t2]-'A']=true;
dfs(t1,t2,z+1);
bz[a[t1][t2]-'A']=false;
}
else dfs(t1,t2,z);
}
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
char s[101];
scanf("%s",s+1);
for(int j=1;j<=m;j++)
a[i][j]=s[j];
}
memset(bz,false,sizeof(bz));
for(int i=1;i<=m;i++)
{
bz[a[1][i]-'A']=true;
dfs(1,i,1);
bz[a[1][i]-'A']=false;
}
printf("%d",max);
}