我来说下自己的理解:
两个字符串s1= ????# 和s2= ???# ,如果#和#相等,则s1和s2的最长子序列等于???? 和 ???的最长子序列+1,如果不等,则s1和s2的最长子序列等于Max(????#与???的最长子序列,????与???#的最长子序列);这大致就是状态转移方程了!!!
#include<stdio.h>
#include<string.h>
int Max(int a,int b){
return a>b?a:b;
}
char str1[1005];
char str2[1005];
int dp[1005][1005];
int main(){
int N;
scanf("%d",&N);
while(N--){
memset(dp,0,sizeof(int)*1005*1005);
scanf("%s%s",str1,str2);
int len1=strlen(str1);
int len2=strlen(str2);
for(int i=0;i<len1;i++){
for(int j=0;j<len2;j++){
if(str1[i]==str2[j]){
dp[i+1][j+1]=dp[i][j]+1;
}
else{
dp[i+1][j+1]=Max(dp[i][j+1],dp[i+1][j]);
}
}
}
printf("%d\n",dp[len1][len2]);
}
return 0;
}