您能否再选择一个稍有难度的题目并给出他的完整c++实现代码
时间: 2024-03-22 22:40:10 浏览: 57
c++代码的实现
好的,我选择了一个稍有难度的题目:最长回文子序列(Longest Palindromic Subsequence)。这是一个经典的动态规划问题,它的目标是找到一个字符串的最长回文子序列的长度。下面是使用 C++ 实现最长回文子序列问题的完整代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int longestPalindromeSubseq(string s) {
int n = s.size();
vector<vector<int>> dp(n, vector<int>(n));
for (int i = n-1; i >= 0; i--) {
dp[i][i] = 1;
for (int j = i+1; j < n; j++) {
if (s[i] == s[j]) {
dp[i][j] = dp[i+1][j-1] + 2;
} else {
dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
}
}
}
return dp[0][n-1];
}
int main() {
string s = "bbbab";
int len = longestPalindromeSubseq(s); // 4
cout << "Longest Palindromic Subsequence: " << len << endl;
return 0;
}
```
在这个代码中,我们使用一个二维数组 dp 来记录每个子问题的最长回文子序列的长度。我们从字符串的最后一个字符开始,逐步向前计算每个子问题的解。对于每个子问题 dp[i][j],如果 s[i] == s[j],那么最长回文子序列的长度就是 dp[i+1][j-1] + 2,因为我们可以将 s[i] 和 s[j] 放在最长回文子序列的两端。否则,我们需要从 dp[i+1][j] 和 dp[i][j-1] 中选择一个较大的值。
在主函数中,我们设置字符串为 "bbbab",然后调用 longestPalindromeSubseq 函数计算最长回文子序列的长度。最后,我们将结果输出到控制台中。
阅读全文