Cod sursa(job #675888)

Utilizator federerUAIC-Padurariu-Cristian federer Data 8 februarie 2012 13:39:24
Problema Cel mai lung subsir comun Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
#define Nmax 1024
using namespace std;

int a[Nmax], b[Nmax], v[Nmax][Nmax], i, j, na, nb;
int sol[Nmax];

ifstream fin("cmlsc.in");
ofstream fout("cmlsc.out");

int main()
{
	fin>>na>>nb;
	for(i=1;i<=na;++i)
		fin>>a[i];
	for(i=1;i<=nb;++i)
		fin>>b[i];
	for(i=1;i<=na;i++)
		for(j=1;j<=nb;j++)
		{
			if(a[i]==b[j])
				v[i][j]=v[i-1][j-1]+1;
			else
				if(v[i-1][j]>v[i][j-1])
					v[i][j]=v[i-1][j];
				else
					v[i][j]=v[i][j-1];
		}
	i=na,j=nb;
	int k=0;
	fout<<v[na][nb]<<'\n';
	while(i)
        if (a[i] == b[j])
            sol[++k] = a[i], --i, --j;
        else if (v[i-1][j] < v[i][j-1])
            --j;
        else
            --i;

	for(i=k;i>=1;i--)
		fout<<sol[i]<<'\n';
	fout<<'\n';
	fin.close();
	fout.close();
	return 0;
}