Cod sursa(job #2727246)

Utilizator vansJos da pa perete vans Data 21 martie 2021 17:48:27
Problema Cel mai lung subsir comun Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1024;

int a[NMAX + 1], b[NMAX + 1], al, bl;
vector<int> dp[NMAX + 1][NMAX + 1];

int main()
{
    freopen("cmlsc.in", "r", stdin);
    freopen("cmlsc.out", "w", stdout);
    scanf("%d%d", &al, &bl);
    for(int i = 1; i <= al; ++i) scanf("%d", &a[i]);
    for(int i = 1; i <= bl; ++i) scanf("%d", &b[i]);
    for(int i = 1; i <= al; ++i)
        for(int j = 1; j <= bl; ++j)
            if(a[i] == b[j]) {
                dp[i][j] = dp[i - 1][j - 1];
                dp[i][j].push_back(a[i]);
            } else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
    printf("%d\n", (int)dp[al][bl].size());
    for(const auto el : dp[al][bl]) printf("%d ", el);
    return 0;
}