算法:
状态转移方程:
当 i = 0 , j = 0 时 , c[i][j] = 0
当 i , j > 0 ; xi = yi 时 , c[i][j] = c[i-1][j-1] + 1
当 i , j > 0 ; xi != yi 时 , c[i][j] = max { c[i][j-1] , c[i-1][j] }
#include<stdio.h>
#include<string.h>
int dp[1010][1010];
int max(int a,int b){
return a>b?a:b;
}
int main(){
char s1[1010],s2[1010];
int n,m,i,j;
while(~scanf("%s%s",s1,s2)){
memset(dp,0,sizeof(dp));
n=strlen(s1);
m=strlen(s2);
for(i=0;i<=n;i++){
for(j=0;j<=m;j++){
if(i==0||j==0){
dp[i][j]=0;
}else if(s1[i-1]==s2[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
printf("%d\n",dp[n][m]);
}
return 0;
}