UVA 10066 - The Twin Towers(最长公共子序)

题目链接

题目 都没看,直接看样例,直接拍代码,1Y。

 1 #include <stdio.h>
 2 #include <string.h>
 3 int p[101][101];
 4 int str1[101],str2[101];
 5 int main()
 6 {
 7     int i,j,n,m,num = 0;
 8     while(scanf("%d%d",&n,&m)!=EOF)
 9     {
10         if(!n && !m)break;
11         num ++;
12         memset(p,0,sizeof(p));
13         for(i = 0; i <= n-1; i ++)
14             scanf("%d",&str1[i]);
15         for(i = 0; i <= m-1; i ++)
16             scanf("%d",&str2[i]);
17         for(i = 1; i <= n; i ++)
18             for(j = 1; j <= m; j ++)
19             {
20                 if(str1[i-1] == str2[j-1])
21                 {
22                     p[i][j] = p[i-1][j-1]+1;
23                 }
24                 else if(p[i][j-1] > p[i-1][j])
25                 {
26                     p[i][j] = p[i][j-1];
27                 }
28                 else
29                 {
30                     p[i][j] = p[i-1][j];
31                 }
32             }
33         printf("Twin Towers #%d\nNumber of Tiles : %d\n",num,p[n][m]);
34         printf("\n");
35     }
36     return 0;
37 }
posted @ 2012-07-20 15:27  Naix_x  阅读(156)  评论(0编辑  收藏  举报