最长公共子序列问题:若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。
给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。
给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。
#include <iostream>
using namespace std;
#define MAX 100
void LCSLength(int m, int n, char *X, char *Y, int c[][MAX], int b[][MAX]){
//*X、*Y为序列X和Y,m、n分别为序列X、Y的长度,c[][]为最长公共子序列的长度,b[][]为标示,分三种情况
int i, j;
for(i = 1; i <= m; i++)
c[i][0] = 0;
for(i = 1; i <= n; i++)
c[0][i] = 0; //以上表示当X、Y中任意一个序列长度为0,则公共子序列长度为0
for(i = 1; i <= m; i++)
for(j = 1;