动态规划法求解最长公共子序列问题c++代码
时间: 2023-10-02 09:12:34 浏览: 51
以下是求解最长公共子序列问题的动态规划算法实现的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 len1 = s1.length(), len2 = s2.length();
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; 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[len1][len2] << endl;
return 0;
}
```
其中,dp[i][j]表示s1前i个字符和s2前j个字符的最长公共子序列长度。如果s1[i-1]和s2[j-1]相同,则dp[i][j]等于dp[i-1][j-1]加1;否则dp[i][j]等于dp[i-1][j]和dp[i][j-1]的最大值。最终答案即为dp[len1][len2],其中len1和len2分别为s1和s2的长度。