#include<iostream.h>
int len[7+1][6+1];
//记录影响len的变化
int b[7][6];
void lcs(char x[],char y[],int lx,int ly)
{
for(int i=0;i<=lx;i++)
{
len[i][0]=0;
}
for(int j=0;j<=ly;j++)
{
len[0][j]=0;
}
for(int i=0;i<lx;i++)
{
for(int j=0;j<ly;j++)
{
if(x[i]==y[j])
{
len[i][j]=len[i-1][j-1]+1;
//改变b[][],记录b的变化为1
b[i][j]=1;
}
else if(len[i-1][j]>=len[i][j-1])
{
len[i][j]=len[i-1][j];
// 改变b[][],记录b的变化为2
b[i][j]=2;
}
else
{
len[i][j]=len[i][j-1];
// 改变b[][],记录b的变化为3
b[i][j]=3;
}
}
}
}
void getB(char x[],int i,int j)
{
if((i+1)==0 || (j+1)==0)
{
return ;
}
if(b[i][j]==1)
{
getB(x,i-1,j-1);
cout<<x[i];
}
else if(b[i][j]==2)
{
getB(x,i-1,j);
}
else if(b[i][j]==3)
{
getB(x,i,j-1);
}
}
int main()
{
char x[7]={'A','B','C','B','D','A','B'};
char y[6]={'B','D','C','A','B','A'};
lcs(x,y,7,6);
cout<<"len[i][j]是:"<<endl;
for(int i=0;i<7;i++)
{
for(int j=0;j<6;j++)
{
cout<<len[i][j]<<" ";
}
cout<<endl;
}
cout<<"最长公共子序列:";
getB(x,7-1,6-1);
cout<<endl;
int bb;
cin>>bb;
return 0;
}