最长公共子序列
最长公共子序列
注:子序列是可以不连续的。
递推公式:
\(dp[i+1][j+1]=\begin{cases}dp[i][j]+1&(s_{i+1}=t_{j+1})\\max(dp[i][j+1],dp[i+1][j])&(其 他)\end{cases}\)
代码:
// Created by CAD on 2020/1/14.
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
int dp[maxn][maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
string s,t;
cin>>s>>t;
int slen=s.length(),tlen=t.length();
for(int i=0;i<slen;++i)
for(int j=0;j<tlen;++j)
if(s[i]==t[j]) dp[i+1][j+1]=dp[i][j]+1;
else dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);
cout<<dp[slen][tlen]<<endl;
return 0;
}
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042