#include<cstring>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
char s1[1005];
char s2[1005];
int dp[1005][1005];
int main(){
//freopen("a.txt", "r", stdin);
while(~scanf("%s %s", s1+1, s2+1)){
memset(dp, 0, sizeof(dp));
s1[0] = ' ';s2[0] = ' ';
int l1 = strlen(s1)-1;
int l2 = strlen(s2)-1;
for(int i = 1; i <= l1; i++){
for(int j = 1; j <= l2; 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]);
}
}
cout << dp[l1][l2] << endl;
}
return 0;
}
POJ1458 HDU1159 Common Subsequence(最长公共子序列 DP)
March 21, 2016