Cod sursa(job #459693)

Utilizator BitOneSAlexandru BitOne Data 30 mai 2010 19:21:42
Problema Cel mai lung subsir comun Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdlib>
#include <fstream>
#define Nmax 1031

/*
 *
 */
 int v[Nmax], w[Nmax];
 int cmlsc[Nmax][Nmax];
 int main( void )
 {
     int N, M, i, j;
     std::ifstream in( "cmlsc.in" );
     in>>N>>M;
     for( i=1; i <= N; ++i )
        in>>v[i];
     for( i=1; i <= M; ++i )
        in>>w[i];
     for( i=1; i <= N; ++i )
        for( j=1; j <= M; ++j )
            if( v[i] == w[j] )
                cmlsc[i][j]=1+cmlsc[i-1][j-1];
            else cmlsc[i][j]=( cmlsc[i-1][j] >= cmlsc[i][j-1] ? cmlsc[i-1][j] : cmlsc[i][j-1] );
     std::ofstream out( "cmlsc.out" );
     out<<cmlsc[N][M]<<'\n';
     for( i=N, j=M; i && j; )
        if( v[i] == w[j] )
            out<<v[i]<<' ', --i, --j;
        else if( cmlsc[i-1][j] >= cmlsc[i][j-1] )
                --i;
             else --j;
    out<<'\n';
    return EXIT_SUCCESS;
 }