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;
}

posted @ 2013-03-26 11:53  algorithms爱好者  阅读(114)  评论(0)    收藏  举报