Pixiv - KiraraShss
232 字
1 分钟
最长公共子序列
题目

分析
-
表示以结尾,以结尾的公共子序列的集合
-
如果,那么
-
如果,那么有两种情况:
- 在最长公共子序列中,不在
- 在最长公共子序列中,不在
- 和都不在
但是表示一定不在,可以在,可以不在,所以包含两个数都不在的情况。同理也是,所以我们只需要求这三个表达式的最大值即可。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n, m;char a[N], b[N];int f[N][N];
int main(){ cin >> n >> m; scanf("%s%s", a + 1, b + 1);
for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= m; j ++ ) { f[i][j] = max(f[i][j - 1], f[i - 1][j]); if (a[i] == b[j]) f[i][j] = max(f[i - 1][j - 1] + 1, f[i][j]); }
cout << f[n][m] << endl; return 0;}文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
最后更新于 2025-04-28,距今已过 361 天
部分内容可能已过时
printsdf's Blog