Pagini recente » Cod sursa (job #1085268) | Cod sursa (job #2635520) | Cod sursa (job #46091) | Cod sursa (job #3216897) | Cod sursa (job #1435984)
#include <fstream>
int n, m, i, j, s1[1026], s2[1026], d[1026][1026], lcs[1026], l;
int main()
{
freopen("cmlsc.in", "r", stdin);
freopen("cmlsc.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i=1;i<=n;i++)
scanf("%d", &s1[i]);
for (i=1;i<=m;i++)
scanf("%d", &s2[i]);
for (i=n;i>0;i--)
for (j=m;j>0;j--)
if (s1[i]==s2[j])
d[i][j]=d[i+1][j+1]+1;
else
d[i][j]=std::max(d[i+1][j], d[i][j+1]);
i=j=1;
while (i<=n && j<=m)
if (s1[i]==s2[j])
{
lcs[++l]=s1[i];
i++;
j++;
}
else
if (d[i+1][j]>d[i][j+1])
i++;
else
j++;
printf("%d\n", d[1][1]);
for (i=1;i<=l;i++)
printf("%d ", lcs[i]);
return 0;
}