AcWing 3692. $\Huge\color{gold}{最长连续公共子序列}$
原题链接
简单
作者:
yxc的小迷妹
,
2023-07-09 07:07:03
,
所有人可见
,
阅读 1567
#include <cstring>
#include <iostream>
using namespace std;
const int N = 110;
int t, res, f[N][N];
char a[N], b[N];
int main()
{
cin >> a + 1 >> b + 1;
int n = strlen(a + 1), m = strlen(b + 1);
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
if(a[i] == b[j])
{
f[i][j] = max(f[i][j], f[i - 1][j - 1] + 1);
if(f[i][j] >= res) t = i;
res = max(res, f[i][j]);
}
cout << res << '\n';
for(int i = t - res + 1; i <= t; i ++) cout << a[i];
return 0;
}
hello,大佬
直接f[i][j] = f[i - 1][j - 1] + 1)也可以过,
想问下加max是为了应对什么情况嘛?
好像确实啊,每个(i,j)坐标点都是好像只扫过了一遍,呢么f[i][j],开始肯定是0,也没有比较的意义了
感觉没啥作用吧
应该只是写动态规划的时候的顺手习惯