最长公共子序列

给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。

输入格式

第一行包含两个整数N和M。

第二行包含一个长度为N的字符串,表示字符串A。

第三行包含一个长度为M的字符串,表示字符串B。

字符串均由小写字母构成。

输出格式

输出一个整数,表示最大长度。

数据范围

1N1000

输入样例:

4 5
acbd
abedc

输出样例:

3

 

#include<bits/stdc++.h>

using namespace std;
int n,m;
char a[1010],b[1010];
int dp[1010][1010];

int main() {
    ios::sync_with_stdio(0);
    cin >> n >> m >> a + 1 >> b + 1;
   for(int i = 1; i <= n; i++) {
       for(int j = 1; j <= m; j++){
           if(a[i] == b[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[n][m];
    return 0;

}

 

posted @ 2020-05-15 10:35  Hazelxcf  阅读(113)  评论(0编辑  收藏  举报