最长公共子序列
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <math.h>
using namespace std;
int dp[1000][1000];
int DP(string s1, string s2){
memset(dp, 0, sizeof(dp));
for(int i=1; i<=s1.size(); ++i){
for(int j=1; j<=s2.size(); ++j){
if(s1[i-1]==s2[j-1]){ //s中的存储是从0位开始的
dp[i][j]=dp[i-1][j-1]+1; //dp中的存储是从1开始的
}
else{
dp[i][j]=max(dp[i][j-1], dp[i-1][j]);
}
}
}
return dp[s1.size()][s2.size()];
}
int main(){
string x, y;
while(cin >> x >> y){
cout << DP(x, y) << endl;
}
}