例题: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;
}