最长公共子序列,状态转移方程见代码。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s1[1005],s2[1005];
int dp[1005][1005];
int main()
{
while(scanf("%s",s1+1)!=EOF)
{
scanf("%s",s2+1);
memset(dp,0,sizeof(dp));
int len1=strlen(s1+1);
int len2=strlen(s2+1);
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
{
if(s1[i]==s2[j])
{
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[len1][len2]);
}
return 0;
}