用动态规划算法求解最长公共子序列,要求使用.cpp文件
时间: 2024-05-02 21:21:14 浏览: 81
以下是使用C++实现的最长公共子序列算法,使用动态规划方法:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1000;
int lcs_length(char* str1, char* str2, int len1, int len2)
{
int dp[MAXN][MAXN];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (str1[i-1] == str2[j-1]) {
dp[i][j] = dp[i-1][j-1] + 1;
} else {
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
}
return dp[len1][len2];
}
int main()
{
char str1[MAXN], str2[MAXN];
cin >> str1 >> str2;
int len1 = strlen(str1);
int len2 = strlen(str2);
int result = lcs_length(str1, str2, len1, len2);
cout << "The length of LCS is " << result << endl;
return 0;
}
```
该算法的时间复杂度为O(n^2),空间复杂度为O(n^2)。
阅读全文