AcWing 897. 输出路径-最长公共子序列
原题链接
简单
作者:
艾西韵
,
2021-03-30 21:23:32
,
所有人可见
,
阅读 758
不仅要输出最长公共子序列的长度,还要输出路径
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 1010;
int n, m;
char a[N], b[N];
int f[N][N];
int main()
{
cin >> n >> m;
cin >> a + 1 >> b + 1;
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] == b[j]) f[i][j] = max(f[i][j], f[i - 1][j - 1] + 1);
}
cout << f[n][m] << endl;
string res;
// 一个倒序的过程
for (int i = n, j = m; i && j; )
{
if (a[i] == b[j]) res += a[i], i --, j --;
else if (f[i - 1][j] > f[i][j - 1]) i --;
else j --;
}
reverse(res.begin(), res.end());
cout << res << endl;
return 0;
}
你这个写的不对 比如abad和baade你输出的不是aad
最长是 3,输出的是 bad [doge]
b跑a前面了
牛