思路:
最长公共子序列。
#include <iostream>
#include <cstdio>
#include <string.h>
#include <queue>
#include <cmath>
#include <algorithm>
#include <map>
typedef long long int lli;
using namespace std;
int dp[1040][1040];
char s1[4040],s2[4040];
int main(){
while(~scanf("%s%s",s1+1,s2+1)){
memset(dp,0,sizeof(dp));
int len = strlen(s2+1);
int i;
for(i = 1;s1[i];i++){
for(int j = 1;j <= len;j++){
dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
dp[i][j] = max(dp[i-1][j-1] + (s1[i] == s2[j]),dp[i][j]);
}
}
printf("%d\n",dp[i-1][len]);
}
}