#include<stdio.h>
#include<string.h>
#define MAXLEN 100
void LCSLength (char *x ,char *y, int m, int n, int c[][MAXLEN], int b[][MAXLEN])
{
int i ,j;
for (i = 0; i <= m; i++) c[i][0] = 0;
for (i = 0; i <= n; i++) c[0][i] = 0;
for (i = 1; i <= m; i++){
for (j = 1; j <= n; j++)
{
if (x[i]==y[j])
{
c[i][j]=c[i-1][j-1]+1;
b[i][j]=1;
}
else if (c[i-1][j]>=c[i][j-1])
{
c[i][j]=c[i-1][j];
b[i][j]=2;
}
else
{ c[i][j]=c[i][j-1];
b[i][j]=3;
}
}
}
}
void LCS(int i ,int j, char *x ,int b[][MAXLEN])
{
if (i ==0 || j==0) return;
if (b[i][j]==1)
{
LCS(i-1,j-1,x,b);
printf("%c ",x[i]);
}
else if (b[i][j]==2)
LCS(i-1,j,x,b);
else LCS(i,j-1,x,b);
}
int main()
{
char x[MAXLEN] = {" DBACDA"};//x[0],y[0]为空
char y[MAXLEN] = {" DBBCABA"};
int m, n;
m = strlen(x);
n = strlen(y);
int b[MAXLEN][MAXLEN];
int c[MAXLEN][MAXLEN];
LCSLength(x, y, m, n, c, b);
LCS(m,n,x,b);
return 0;
}