Cod sursa(job #2228353)

Utilizator alexandru2001alexandru alexandru2001 Data 3 august 2018 14:23:13
Problema Cel mai lung subsir comun Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,m;
int imax;
int vn[10000],vm[10000];
int a[10000];
int pred[10000];
int mmaxa[10000];
int inversator[10000];
int lll[10000][10000];
void nibab(int rudi[10000])
{
    for (int i=0; i<m+n; i++){
        rudi[i]=0;
    }
}
void nibab2(int rudi[10000])
{
    for (int i=0; i<m+n; i++){
        rudi[i]=0;
    }
}

int main()
{
    ifstream f("cmlsc.in");
    ofstream g("cmlsc.out");
f>>n>>m;

for (int i=0; i<n; i++){
    f>>vn[i];
}
for (int i=0; i<m; i++){
    f
     >>vm[i];
}
int s=-1;

int rmax=0;
for (int i=0; i<n; i++){
    if (vn[i]==vm[0]){lll[i][0]=1;
    if (rmax==0){rmax=1; s++; a[s]=i;}}
}
for (int i=0; i<m; i++){
    if (vn[0]==vm[i]){lll[0][i]=1;
    if (rmax==0){rmax=1; s++; a[s]=0;}}
}
for (int i=1; i<n; i++){
    for (int j=1; j<m; j++){
        if (vn[i]==vm[j]){
            lll[i][j]=lll[i-1][j-1]+1;
        if (lll[i-1][j-1]==rmax){s++; a[s]=i;}
        }
        else{
            lll[i][j]=max(lll[i-1][j], lll[i][j-1]);
        }
if (lll[i][j]>rmax){rmax=lll[i][j];}
    }
}


        g << s+1<< endl;

for (int i=0; i<s+1; i++){
    g << vn[a[i]]<<' ';
}












}