最长公共子序列问题 (LCS问题)(动态规划)

例题:x={A,B,C,B,D,A,B} 

           y={B,D,C,A,B,A}

求x与y最长的公共子序列

表达式:  if(xm=xn)  LCS(m,n)=LCS(m-1,n)

                else max( LCS(m-1,n),LCS(m,n-1) )

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int d[1000][1000]={0},len1,len2;
char s1[1000],s2[1000];
void lengcs();
int max(int ,int);
int main() {
    while(scanf("%s%s",s1,s2)!=EOF){
        len1=strlen(s1);
        len2=strlen(s2);
        lengcs();
        printf("%d\n",d[len1][len2]);
    }
}
void lengcs(){
    int i,j;
    for(i=1;i<=len1;i++)
        for(j=1;j<=len2;j++){
        if(s1[i-1]==s2[j-1])    d[i][j]=d[i-1][j-1]+1;
        else d[i][j]=max(d[i-1][j],d[i][j-1]);
    }
}
int max(int a,int b){
    return a>b?a:b;
}



猜你喜欢

转载自blog.csdn.net/huang1600301017/article/details/81023413