#include <iostream>
using namespace std;
#define MAX(a, b) a>b?a:b
#define M 251
char s1[M], s2[M];
int dp[2][M]; //滚动数组
int main()
{
int i, j, l1, l2, ans;
while(scanf("%s%s", s1+1, s2+1) != EOF)
{
l1 = strlen(s1+1);
l2 = strlen(s2+1);
memset(dp, 0, sizeof(dp));
for(i = 1; i <= l1; i++){
for(j = 1; j <= l2; j++){
if(s1[i] == s2[j])
dp[i%2][j] = dp[1-i%2][j-1]+1;
else dp[i%2][j] = MAX(dp[1-i%2][j], dp[i%2][j-1]);
}
}
ans = l1%2?dp[1][l2]:dp[0][l2];
printf("%d\n", ans);
}
return 0;
}
poj1458 dp Common Subsequence
最新推荐文章于 2018-11-08 11:19:15 发布