文章

150

粉丝

0

获赞

558

访问

23.2k

头像
最长公共子序列LCS 题解:
P1874 复旦大学机试题
发布于2026年2月14日 15:50
阅读数 176

#include <bits/stdc++.h>
using namespace std;

int main() {   
    string s1, s2, s3;    
    while (cin >> s1 >> s2 >> s3) {
        int n1 = s1.length(), n2 = s2.length(), n3 = s3.length();
        
        // dp[i][j][k] = 三维LCS长度
        vector<vector<vector<int>>> dp(n1 + 1, vector<vector<int>>(n2 + 1, vector<int>(n3 + 1, 0)));
        
        for (int i = 1; i <= n1; i++) {
            for (int j = 1; j <= n2; j++) {
                for (int k = 1; k <= n3; k++) {
                    if (s1[i-1] == s2[j-1] && s2[j-1] == s3[k-1]) {
                        dp[i][j][k] = dp[i-1][j-1][k-1] + 1;
                    } else {
                        dp[i][j][k] = max({dp[i-1][j][k], dp[i][j-1][k], dp[i][j][k-1]});
                    }
                }
            }
        }
        
        // 回溯找LCS(逆序)
        string lcs;
        int i = n1, j = n2, k = n3;
        while (i ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发