Pagini recente » Cod sursa (job #212696) | Cod sursa (job #1179017) | Cod sursa (job #674073) | Cod sursa (job #823105) | Cod sursa (job #2265103)
#include <cstdio>
#define MAXL 1025
using namespace std;
int dp[MAXL+5][MAXL+5];
int a[MAXL+5], b[MAXL+5], v[MAXL+5];
inline int maxim( int a, int b, int c )
{
if( a<b )
a=b;
if( a<c )
a=c;
return a;
}
int main()
{
freopen( "cmlsc.in", "r", stdin );
freopen( "cmlsc.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++ )
dp[i][j]=maxim(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]+(a[i]==b[j]));
printf( "%d\n", dp[n][m] );
int p=dp[n][m];
for( int i=n;i>=1 && p>0;i-- )
for( int j=m;j>=1 && p>0;j-- )
if( dp[i][j]==p && a[i]==b[j] )
{
v[p]=a[i];
p--;
}
for( int i=1;i<=dp[n][m];i++ )
printf( "%d ", v[i] );
return 0;
}