#include<iostream>
#include<time.h>
using namespace std;
int maxnum(int a, int b) {
return a>b?a:b;
}
int LCSa(char *a, int an, char *b, int bn) {
if(an<=0 || bn<=0) return 0;
if(a[an-1]==b[bn-1]) return 1+LCSa(a, an-1, b, bn-1);
return maxnum(LCSa(a, an-1, b, bn), LCSa(a, an, b, bn-1));
}//递归
int LCSb(char *a, int an, char *b, int bn) {
if(an<0 || bn<0) return 0;
int **c=new int *[an+1];
for(int i=0;i<=an;i++)
c[i]=new int[bn+1]();
for(int i=1;i<=an;i++) {
for(int j=1;j<=bn;j++) {
if(a[i-1]==b[j-1]) c[i][j]=c[i-1][j-1]+1;
else if(c[i][j-1]>=c[i-1][j]) c[i][j]=c[i][j-1];
else c[i][j]=c[i-1][j];
}
}
int res=c[an][bn];
for(int i=0;i<=an;i++)
delete []c[i];
delete []c;
return res;
}//非递归
int main() {
clock_t start,end;
char p[7]={'A','B','C','B','D','A','B'};
char q[6]={'B','D','C','A','B','A'};
cout<<LCSa(p, 7, q, 6)<<endl;;
cout<<LCSb(p, 7, q, 6)<<endl;;
system("pause");
return 0;
}