简单题,求最长公共序列。

 1 #include<stdio.h>
2 #include<string.h>
3 int a[105],b[105],d[105][105];
4 int max(int a,int b)
5 {return a>b ?a :b;}
6 int main()
7 {
8 int m,n,i,j,num=0;
9 while(scanf("%d %d",&m,&n)==2)
10 {
11 if(!m && !n) break;
12 num++;
13 for(i = 0; i < m; i++)
14 scanf("%d",&a[i]);
15 for(j = 0; j < n; j++)
16 scanf("%d",&b[j]);
17 memset(d,0,sizeof(d));
18 for(i = 0; i < m; i++)
19 for(j = 0; j < n; j++)
20 if(a[i] == b[j])
21 d[i+1][j+1] = d[i][j]+1;
22 else
23 d[i+1][j+1] = max(d[i][j+1],d[i+1][j]);
24 printf("Twin Towers #%d\nNumber of Tiles : %d\n\n",num,d[m][n]);
25 }
26 return 0;
27 }