#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
int c[8][7],b[8][7];
void LCS_length (const string& x, const string& y)
{
int m = x.length();
int n = y.length();
for (int i = 0; i <= m; i++)
c[i][0] = 0;
for (int j = 1; j <= n; j++)
c[0][j] = 0;
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
{
if (x[i-1] == y[j-1])//x y 都是从下标 0 开始存储
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 0;
}
else if (c[i-1][j] >= c[i][j-1])
{
c[i][j] = c[i-1][j];
b[i][j] = 1;
}
else
{
c[i][j] = c[i][j-1];
b[i][j] = -1;
}
}
}
void Print_LCS (const string& x, int i, int j)
{
if (i == 0 || j == 0)
return;
if (b[i][j] == 0)
{
Print_LCS (x, i-1, j-1);
cout<<x[i-1];//x 从下标0开始
}
else if (b[i][j] == 1)
Print_LCS (x, i-1, j);
else
Print_LCS (x, i, j-1);
}
int main()
{
string x = "ABCBDAB";
string y = "BDCABA";
LCS_length (x, y);
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 7; j++)
{
if(j != 0)
cout<<" ";
cout<<c[i][j];
}
cout<<endl;
}
Print_LCS (x, 7, 6);
return 0;
}