求最大公共子序列,类似记忆动态规划。
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<functional>
#include<set>
#include<map>
#include<cstdlib>
#include<vector>
#include<cmath>
#include <algorithm>
#pragma warning(disable:4996)
using namespace std;
char s1[1010],s2[1010];
int dp[1010][1010];
int main()
{
int n,i,j,len1,len2;
while (~scanf("%s %s",s1,s2))
{
len1 = strlen(s1);
len2 = strlen(s2);
memset(dp, 0, sizeof(dp));
if (len1 == 0 || len2 == 0)
{
printf("0\n");
continue;
}
for(i=1;i<=len1;i++)
for (j = 1; j <= len2; j++)
{
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[i-1][j-1]);
}
return 0;
}