Pagini recente » Cod sursa (job #2082517) | Cod sursa (job #2244209) | Cod sursa (job #113135) | Cod sursa (job #2599642) | Cod sursa (job #1852715)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int n, m, dp[1030][1030], rez[1030], len;
int main()
{
freopen("cmlsc.in", "r", stdin);
freopen("cmlsc.out", "w", stdout);
scanf("%d%d", &n, &m);
int a[n+1], b[m+1];
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])
dp[i][j] = 1 + dp[i-1][j-1];
else
dp[i][j] = max(dp[i][j], max(dp[i-1][j], dp[i][j-1]));
for(int i = n, j = m; i; )
if(a[i] == b[j])
rez[++len] = a[i], --i, --j;
else if(dp[i-1][j] < dp[i][j-1])
--j;
else
--i;
printf("%d\n", len);
for(int i = len; i > 0; --i)
printf("%d ", rez[i]);
return 0;
}