最长公共子序列问题动态规划算法c++代码
时间: 2023-08-07 17:43:15 浏览: 105
好的,以下是最长公共子序列问题的动态规划算法的C++代码:
```c++
#include <iostream>
#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`和`s2`的前`i`个字符和前`j`个字符的最长公共子序列的长度。其中,如果`s1[i-1]`和`s2[j-1]`相等,则`dp[i][j]`可以由`dp[i-1][j-1]`转移而来;否则,`dp[i][j]`取`dp[i-1][j]`和`dp[i][j-1]`的最大值。
最后输出`dp[n][m]`即为`s1`和`s2`的最长公共子序列的长度。
阅读全文