#include<stdio.h>
#include<stdlib.h>
int Lcs(int n,int m,int a[], int b[], int c[100][100])//最长子序列递归实现
{
if (n== 0 || m == 0)
return 0;
if (a[n] == b[m])
return Lcs(n - 1, m - 1, a, b, c) + 1;
else
return Lcs(n - 1, m, a, b, c) > Lcs(n, m - 1, a, b, c) ? Lcs(n - 1, m, a, b, c) :Lcs(n, m - 1, a, b, c);
}
void ReLcs(int n, int m, int a[], int b[], int c[100][100])//最长子序列动态规划
{
for (int i = 0; i <= n; i++)
c[i][0] = 0;
for (int j = 0; j <= m; j++)
c[0][j] = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (a[i-1] == b[j-1]) {
c[i][j] = c[i - 1][j - 1] + 1;
if (c[i][j] != c[i - 1][j] && c[i][j] != c[i][j - 1])
printf(" %d", a[i - 1]);
}
else
c[i][j] = c[i - 1][j] > c[i][j - 1] ? c[i - 1][j] : c[i][j - 1];
}
int main()
{
int a[] = { 1,2,3,4,5,6 };
int b[] = { 1,2,4,5,6,6,7,8};
int c[100][100] = { 0 };
int d[100][100] = { 0 };
printf("%d", Lcs(6, 8, a, b, c));
//ReLcs(6, 8, a, b, c);
//printf("\n %d", c[6][8]);
}