#include <stdio.h>
#include <stdlib.h>
int max(int a,int b)
{
if(a>=b) return a;
else return b;
}
#define mem(x,y) memory[(x)*lb+(y)]
int LCS(char a[],int la,char b[],int lb)
{
static int *memory=(int*)malloc(sizeof(int)*(la+1)*(lb+1) );
static int i,j,ii,jj;
for(i=0;i<=la;i++)
for(j=0;j<=lb;j++)
memory[i*lb+j]=0;
for(i=1;i<=la;i++)
for(j=1;j<=lb;j++)
{
if(a[i-1]==b[j-1]) mem(i,j)=mem(i-1,j-1)+1;
else mem(i,j)=max(mem(i-1,j),mem(i,j-1 ));
//------------------test--------------------
for(ii=0;ii<=la;ii++)
{
for(jj=0;jj<=lb;jj++)
{
printf("%d\t",mem(ii,jj));
}
printf("\n");
}
printf("\n");
//----------------------------------------
}
return mem(la,lb);
}
int main()
{
char a[]="program",b[]="algorithm";
int la=sizeof(a)/sizeof(char)-2;
int lb=sizeof(b)/sizeof(char)-2;
// printf("%d",la);
printf("LCS(%s,%s)=%d\n",a,b,LCS(a,la,b,lb));
return 0;
}