Pagini recente » Cod sursa (job #2333234) | Cod sursa (job #366470) | Cod sursa (job #3164206) | Cod sursa (job #1225696) | Cod sursa (job #1456992)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int n, m, matrix[1025][1025], vect_a[1025], vect_b[1025];
ifstream in("cmlsc.in");
ofstream out("cmlsc.out");
in >> n >> m;
for (int i = 0; i <= n; i++) // zerorizam matricea de lucru
for (int j = 0; j <= m; j++)
matrix[i][j] = 0;
for (int i = 1; i <= n; i++) // citim elemetele primului vector
in >> vect_a[i];
for (int j = 1; j <= m; j++) // citim elemetele celui de-al doilea vector
in >> vect_b[j];
for (int i = 1; i <= n; i++) // parcurgem fiecare element din fiecare vector
for (int j = 1; j <= m; j++)
{
if (vect_a[i] == vect_b[j]) // daca elementele sunt egale atunci lungimea sirului creste cu +1 de la lungimea celui dinainte lui
matrix[i][j] = matrix[i - 1][j - 1] + 1;
else
if (matrix[i - 1][j] > matrix[i][j - 1]) // daca sunt diferite se alege lungimea cea mai mare dintre elementele determinate inainte (lungimea maxima se propaga)
matrix[i][j] = matrix[i - 1][j];
else
matrix[i][j] = matrix[i][j - 1];
}
out << matrix[n][m] << "\n";
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (vect_a[i] == vect_b[j] && matrix[n][m] > 0)
{
out << vect_a[i] << " ";
matrix[n][m]--;
}
// cout << "\n\n";
//system("PAUSE");
return 0;
}