Cod sursa(job #2946721)

Utilizator gripzStroescu Matei Alexandru gripz Data 25 noiembrie 2022 01:24:31
Problema Cel mai lung subsir comun Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>

#define MaxN 1026

using namespace std;

int dp[MaxN][MaxN], M, N;
int A[MaxN], B[MaxN];

int LCS(int i, int j) {
    if(i > M || j > N) {
        return 0;
    }
    if(dp[i][j] == -1) {
        if(A[i] == B[j]) {
            dp[i][j] = 1 + LCS(i + 1, j + 1);
            return dp[i][j];
        } else {
            dp[i][j] = max(LCS(i + 1, j), LCS(i, j + 1));
            return dp[i][j];
        }
    } else {
        return dp[i][j];
    }
}

int main()
{
    cin >> M >> N;
    for(int i = 1; i <= M; i++) {
        for(int j = 1; j <= N; j++) {
            dp[i][j] = -1;
        }
    }

    for(int i = 1; i <= M; i++) {
        cin >> A[i];
    }

    for(int i = 1; i <= N; i++) {
        cin >> B[i];
    }

    cout << LCS(1, 1);

    return 0;
}