Pagini recente » Cod sursa (job #1103603) | Cod sursa (job #3183282) | Istoria paginii runda/post_oji | Cod sursa (job #2915629) | Cod sursa (job #1556402)
#include <cstdio>
#include <algorithm>
using namespace std;
int d[1026][1026] , a[1026] , b[1026] ;
void scriere ( int x , int y )
{
if( x > 0 and y > 0 )
{
if( a[x] == b[y] )
{
scriere( x-1 , y-1 );
printf("%d ",a[x]);
}
else
{
if( d[x-1][y] > d[x][y-1] )
scriere( x - 1 , y ) ;
else
scriere( x , y - 1 ) ;
}
}
}
int main()
{
freopen("cmscl.in","r",stdin);
freopen("cmscl.out","w",stdout);
int n , m ;
scanf("%d %d",&n,&m);
for ( int i = 1 ; i <= n ; i++ )
{
scanf("%d ",&a[i]);
}
for ( int i = 1 ; i <= m ; i++ )
{
scanf("%d ",&b[i]);
}
for ( int i = 1 ; i <= n ; i++ )
{
for ( int j = 1 ; j <= m ; j++ )
{
if ( a[i] == b[j] ) d[i][j] = d[i-1][j-1] + 1 ;
else d[i][j] = max( d[i-1][j] , d[i][j-1] ) ;
}
}
printf("%d\n",d[n][m]);
scriere(n,m);
return 0 ;
}