Pagini recente » Istoria paginii utilizator/g00se | Cod sursa (job #604830) | Cod sursa (job #2481246) | Cod sursa (job #1691772) | Cod sursa (job #2693917)
#include<bits/stdc++.h>
using namespace std;
ifstream fi("cmlsc.in");
ofstream fo("cmlsc.out");
int N, M, i, A[1030], B[1030], sir[1030], bst;
int LCS( int *X, int *Y, int m, int n )
{
int L[m + 1][n + 1];
int i, j;
for (i = 0; i <= m; i++)
for (j = 0; j <= n; j++)
{
if (i == 0 || j == 0) L[i][j] = 0;
else if (X[i - 1] == Y[j - 1]) L[i][j] = L[i - 1][j - 1] + 1;
else L[i][j] = max(L[i - 1][j], L[i][j - 1]);
}
/*cout << " #";
for(i=0; i<m; i++) cout << " " << Y[i]; cout << '\n';
for (i = 0; i < m; i++)
{
cout << " " << X[i];
for (j = 0; j < n; j++)
cout << " " << L[i][j];
cout << '\n';
}*/
for (i = M, j = N; i; )
if (A[i] == B[j]) sir[++bst] = A[i], --i, --j;
else
if (L[i-1][j] < L[i][j-1]) --j;
else --i;
return L[m][n];
}
// Driver Code
int main()
{
fi >> N >> M;
for(i=0; i<N; i++) fi >> A[i];
for(i=0; i<M; i++) fi >> B[i];
fo /*<< "Length of LCS is "*/ << LCS( A, B, M, N ) << '\n';
for (i = bst; i; --i) fo << sir[i];
return 0;
}