Cod sursa(job #2243437)

Utilizator Stefan3002Stefan Stefan3002 Data 20 septembrie 2018 16:04:03
Problema Cel mai lung subsir comun Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

ifstream intrare("cmlsc.in");
ofstream iesire("cmlsc.out");

int sir1[256],sir2[256],maxim=-1,g,h;
long long int T[256][256],n,m,i,j;


int main()
{
intrare>>n>>m;
for(i=1;i<=n;i++)
    intrare>>sir1[i];

for(i=1;i<=m;i++)
    intrare>>sir2[i];


    for(i=1;i<=n;i++){

        for(j=1;j<=m;j++){
            if(sir1[i]==sir2[j]){
                T[i][j]=T[i-1][j-1]+1;
                if(T[i][j]>maxim)
                    maxim=T[i][j];
                g=i;
                h=j;
            }

            else
                T[i][j]=max(T[i-1][j],T[i][j-1]);

        }
    }

    int numar=0;
    while(true){
    if(T[g-1][h-1]!=T[g][h] && g-1>=1 && h-1>=1){
    numar=numar*10+sir2[h];
    g--;h--;
    }
    else if(h==1)
        g--;
    else if(T[g-1][h-1]==T[g][h])
        h--;

    if(g==1){
        numar=numar*10+sir2[h];
        break;
    }


    }

int o=0;
while(numar>0){
    int c=numar%10;
    o=o*10+c;
    numar/=10;
}
iesire<<maxim<<endl<<o;


    return 0;
}