Cod sursa(job #1908171)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 6 martie 2017 23:16:50
Problema Cel mai lung subsir comun Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>

char dp[1025][1025];
char a[1025],b[1025];

int max(int a, int b){
	return (a>b)?a:b;
}

void printPath(int x, int y){
	
	int i = x, j = y;
	while ((i>0)&&(dp[i-1][j]==dp[i][j])) i--;
	while ((j>0)&&(dp[i][j-1]==dp[i][j])) j--;
	if (i==0 || j == 0) printPath(i-1, j-1);
	printf("%d ", a[i]);
	return;
}

int main(){
	
	freopen("cmlsc.in", "r", stdin);
	freopen("cmlsc.out", "w", stdout);
	
	int m,n;
	
	
	scanf("%d %d", &m, &n);
	char i,j;

	for (i=1; i<=m; i++){
		for (j=1; j<=n; j++){
			if (a[i] == b[j]) dp[i][j] = dp[i-1][j-1]+1;
			else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
		}
	}
	
	printf("%d\n", dp[m][n]);
	printPath(m, n);
	return 0;
}