请问大佬们我这段代码哪出问题了,无法求出最长公共子序列

#include <iostream>
#include <string>

using namespace std;

#define NUM 100

int c[NUM][NUM];
int b[NUM][NUM];
char zimu[NUM];

void LCSLength (int m,int n,string X,string Y);
void LCS (int m,int n,string X);


int main(){
    
    string X = "INTHEBEGINNING";
    string Y = "ALLLTHETHINGSARELOST";
    
    int lenX = (int)X.length();
    int lenY = (int)Y.length();
    
    LCSLength(lenX, lenY, X, Y);
    
    printf("%d\n",c[lenX][lenY]);
    
    LCS(lenX, lenY, X);
    
    return 0;
}

void LCSLength (int m,int n,string X,string Y){
    
    int i,j;
    
    for(i = 0;i <= m;i++)
        c[i][0] = 0;
        b[i][0] = 0;
    for(i = 0;i <= n;i++)
        c[0][i] = 0;
        b[i][0] = 0;
    
    for(i = 0;i <= m-1;i++){
        for(j = 0;j <= n-1;j++){
            if(X[i] == Y[j]){
                c[i+1][j+1] = c[i][j] + 1;
                b[i+1][j+1] = 1;
            }else if(c[i][j+1] >= c[i+1][j]){
                c[i+1][j+1] = c[i][j+1];
                b[i+1][j+1] = 2;
            }else{
                c[i+1][j+1] = c[i+1][j];
                b[i+1][j+1] = 3;
            }
        }
    }
    
}

void LCS (int m,int n,string X){
    
    int i = m,j = n,x = 0;;
    int flag = 0;
    
    do{
        if(b[i][j] == 1){
            zimu[x] = X[i-1];
            i--;
            j--;
            x++;
        }else if(b[i][j] == 2){
            i--;
        }else if(b[i][j] == 3){
            j--;
        }
        flag++;
    }while(flag <= m);

    for (x = (int)strlen(zimu); x >= 0; x--) {
        printf("%c ",zimu[x]);
    }
}

 

最长公共子序列的规则是2个字符串相同字符最 大的长度吧,我来测试一下。

你这是什么思路,从哪里看来的呢?看上去像是 DP 但是又不是 DP 的代码。你最好说说一下你的思路,要不然我们也无从下手呀。

你的思路有点乱,不是标准的动态规划的思路。

这是我写的最长公共子序列LCS和最长递增子序列LIS 的代码,使用了标准的动态规划思想以及代码,你可以参考一下。https://blog.csdn.net/qq_46523755/article/details/115276919

LCS可以使用二维数组或者滚动数组,还可以增加打印路径功能。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y