LCS,套模板
```cpp
#include<iostream>
#include<cstring>
using namespace std;
//LCS,这里只要求长度
int main(){
string s1,s2;
cin>>s1>>s2;
const int N = 110;
int dp[N][N]; //dp[i][j]表示ab分别在i,j处结尾的子串LCS长度
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]) dp[i][j] = dp[i-1][j-1]+1;
else dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
}
cout<<dp[s1.size()][s2.size()];
return 0;
}
#include<cstring>
using namespace std;
//LCS,这里只要求长度
int main(){
string s1,s2;
cin>>s1>>s2;
const int N = 110;
int dp[N][N]; //dp[i][j]表示ab分别在i,j处结尾的子串LCS长度
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]) dp[i][j] = dp[i-1][j-1]+1;
else dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
}
cout<<dp[s1.size()][s2.size()];
return 0;
}
````