POJ1458( 求最长公共子序列)
注意数组的长度要大于200!
用二维数组打表,记录最长的长度(相等左上角值加一,不等就取上面和左面的中大的那个值)
#include <stdio.h>
#include <string.h>
int main()
{
char a[205];char b[205];
int len[205][205],m,n,i,j;
while(scanf("%s %s",a,b)!=EOF)
{
m=strlen(a);
n=strlen(b);
for(i=0;i<=m;i++)
len[i][0]=0;
for(i=0;i<=n;i++)
len[0][i]=0;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i-1]==b[j-1])
{
len[i][j]=len[i-1][j-1]+1;
}
else
{
len[i][j]=len[i-1][j]>len[i][j-1]?len[i-1][j]:len[i][j-1];
}
}
}
printf("%d\n",len[m][n]);
}
return 0;
}

浙公网安备 33010602011771号