最长公共子序列动态规划算法c++
时间: 2023-08-03 19:17:09 浏览: 131
以下是最长公共子序列的动态规划算法的 C++ 代码实现:
```c++
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 1005;
int dp[MAXN][MAXN];
int main() {
string s1, s2;
cin >> s1 >> s2;
int n = s1.length(), m = s2.length();
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (s1[i - 1] == s2[j - 1]) {
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] << endl;
return 0;
}
```
其中,`dp[i][j]` 表示 s1 的前 i 个字符和 s2 的前 j 个字符的最长公共子序列的长度。在状态转移时,如果两个字符相等,那么最长公共子序列的长度就是它们前面的最长公共子序列长度再加 1;否则,最长公共子序列的长度就是 s1 前 i - 1 个字符和 s2 前 j 个字符的最长公共子序列长度和 s1 前 i 个字符和 s2 前 j - 1 个字符的最长公共子序列长度的最大值。最终,`dp[n][m]` 就是 s1 和 s2 的最长公共子序列的长度。
阅读全文