蓝桥杯ADV-1020_试题 算法提高 最长公共子序列
题目描述:
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定两个字符串,寻找这两个字串之间的最长公共子序列。
输入格式
输入两行,分别包含一个字符串,仅含有小写字母。
输出格式
最长公共子序列的长度。
样例输入
abcdgh
aedfhb
样例输出
3
样例说明
最长公共子序列为a,d,h。
数据规模和约定
字串长度1~1000。
算法描述:线性DP、最长公共子序列
分析:
两串向后移动关系三种情况:01、10、11
#include<iostream>
using namespace std;
const int N = 1010;
int n, m;
string a, b;
int f[N][N];
int main()
{
cin >> a >> b;
int n = a.size(), m = b.size();
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= m ; j ++)
{
f[i][j] = max(f[i-1][j], f[i][j-1]);
if(a[i - 1] == b[j - 1]) f[i][j] = max(f[i][j], f[i-1][j-1] + 1);
}
cout << f[n][m] << endl;
return 0;
}

浙公网安备 33010602011771号