边写代码,边记录,所以会使得顺序有些错乱,这次写的是动态规划的最长子序列问题。
伪代码上图已给,我写的代码如下:
#include <stdio.h>
#include <string.h>
#define M 8
int L[M][M]={0};
int LCS(char *A,char *B,int a,int b);
int main(void)
{
char A[] = "zxyxyz",B[] = "xyyzx";
printf("the length is: %d\n",LCS(A,B,strlen(A),strlen(B)));
return 0;
}
int LCS(char *A,char *B,int a,int b)
{
int i=0,j=0;
for(i=0;i<a;i++)
{
L[i][0] = 0;
}
for(i=0;i<b;i++)
{
L[0][i] = 0;
}
for(i=1;i<=a;i++)
{
for(j=1;j<=b;j++)
{
if(A[i-1]==B[j-1]) L[i][j] = L[i-1][j-1]+1;
else L[i][j] = L[i-1][j]>L[i][j-1]?L[i-1][j]:L[i][j-1];
}
}
return L[a][b];
}