最长公共子序列

守給你的承諾、 提交于 2020-01-14 19:27:40

最长公共子序列

注:子序列是可以不连续的。

递推公式:

\(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;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!