Tìm số Z lớn nhất nhận được sau khi xóa các chữ số của X và Y

Đề bài:

image

Code của em đây ạ

#include<bits/stdc++.h>
#define ll long long

using namespace std;

ll pa[209][209],ma;
string s1,s2,skq = "";

void lam()
{
    for(ll i = s1.length() - 1;i >= 0;i--)
        for(ll j = s2.length() - 1;j >= 0;j--)
            if(s1[i] == s2[j])
                pa[i][j] = pa[i + 1][j + 1] + 1;
            else
                pa[i][j] = max(pa[i + 1][j],pa[i][j + 1]);
    ma = pa[1][1];
}

void lam1()
{
    ll is = 1,js = 1,so = 0,i,j;
    while(ma != so)
    {
        for(ll ch = '9';ch >= '0';ch--)
        {
            i = is;
            j = js;
            while(s1[i] != ch && i < s1.length())
                i++;
            while(s2[j] != ch && j < s2.length())
                j++;
            if(pa[i][j] == ma - so)
            {
                skq = skq + (char)ch;
                is = i + 1;
                js = j + 1;
                break;
            }
        }
        so ++;
    }
    while(skq[0] == '0' && skq != "0")
        skq.erase(0,1);
}

void w()
{
    if(ma == 0)
        cout << "0";
    else
    {
        lam1();
        cout << skq;
    }
}

int main()
{
    cin >> s1 >> s2;
    lam();
    w();
}

Với test mẫu thì em đúng nhưng với test X = 12345 và Y = 4351023 thì code của em ra là 35 chú không phải 123 ạ!

Nhờ mọi người sửa giúp em với ạ!

Em cảm ơn ạ!

Bạn giải thích qua về hướng làm của bạn trước được không ạ. Tại đặt tên biến với tên hàm lung tung quá nên mình đọc 1 hồi chưa biết là code này làm những gì :woman_facepalming:. Nếu không thì đặt lại tên biến có ý nghĩa hơn 1 chút cũng được ạ :woman_facepalming:. lam, lam1, ma, js, is… làm mình hơi hoang mang.

3 Likes

lam,lam1: Tên các thủ tục của chương trình
w: Thủ tục ghi kết quả
is,js: Vị trí bắt đầu của i,j
s1,s2,skq: 2 xâu X, Y nhập vào và xâu kết quả

em in toàn bộ cái mảng pa ra là thấy :V

ma = pa[1][1]; số 1 là sao đây? :V :V :V

5 Likes

Có chỗ nào submit code ko bạn, bài này vét cạn thôi nhỉ :))

Đọc 1 hồi mới biết là bài tìm dãy con chung :smiley:

3 Likes

Không phải tìm dãy con chung, dãy cần tìm không cần liên tiếp

Vì vậy mình không ghi là “chuỗi con chung”.

Bạn cần bảng truy vết nữa mới ra kq được :slight_smile:

4 Likes

pa[1][1] là lưu giá trị của độ dài lớn nhất ạ

Em có bộ test thôi anh ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?