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 }