Cod sursa(job #2693917)

Utilizator Hey_HeyIacovlev Denis Hey_Hey Data 7 ianuarie 2021 16:24:23
Problema Cel mai lung subsir comun Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#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;  
}