// 最长公共子序列
// 题目来源: http://ybt.ssoier.cn:8088/problem_show.php?pid=1265
/*
xi==yi dp[i][j]=dp[i-1][j-1]+1;
xi!=yi dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
*/
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
string s,t;
int lens,lent,dp[N][N];
int main()
{
cin>>s>>t;
lens=s.size();
lent=t.size();
s=' '+s;
t=' '+t;
for(int i=1; i<=lens; i++)
{
for(int j=1; j<=lent; j++)
{
if(s[i]==t[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[lens][lent]<<endl;
return 0;
}
最长公共子序列---线性dp
于 2023-02-12 15:34:31 首次发布