文章
99
粉丝
120
获赞
8
访问
97.5k
#include <iostream>
#include <string>
using namespace std;
int main() {
// 从标准输入读取三个字符串
string a, b, c;
cin >> a >> b >> c;
// 计算每个字符串的长度
int lena = a.size();
int lenb = b.size();
int lenc = c.size();
// 创建三维动态规划数组,用于存储到当前位置为止的最长公共子序列
string dp[lena + 1][lenb + 1][lenc + 1];
// 初始化动态规划数组的边界条件
dp[0][0][0] = "";
// 使用三重循环遍历所有可能的字符串组合
for (int i = 1; i <= lena; i++) {
for (int j = 1; j <= lenb; j++) {
for (int k = 1; k <= lenc; k++) {
// 如果当前字符在三个字符串中都相同,则将此字符添加到序列中
if (a[i - 1] == b[j - 1] && b[j - 1] == c[k - 1]) {
dp[i][j][k] = dp[i - 1][j - 1][k - 1] + a[i - 1];
}
else {
// 否则,选择前一个状态中最长的子序列
int l1 = dp[i - 1][j][k].size();
int l2 = dp[i][j - 1][k].size();
int l3 = ...
登录后发布评论
暂无评论,来抢沙发