最长公共子序列
注:子序列是可以不连续的。
递推公式:
\(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; }
来源:https://www.cnblogs.com/CADCADCAD/p/12193482.html