/* 最长公共子序列 */ #include <cstdio> #include <string.h> #include <iostream> const int maxn=105; int N[maxn],M[maxn]; int dp[2][maxn]; int main() { int i,j,n,m,num=0; while(true){ scanf("%d%d",&n,&m); if(n==0&&m==0) break; for(i=0;i<n;i++) scanf("%d",&N[i]); for(j=0;j<m;j++) scanf("%d",&M[j]); int d=1; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { for(j=1;j<=m;j++){ if(N[i-1]==M[j-1]) dp[d][j]=dp[d^1][j-1]+1; else dp[d][j]=dp[d][j-1]>dp[d^1][j]?dp[d][j-1]:dp[d^1][j]; } d=d^1; } printf("Twin Towers #%d ",++num); printf("Number of Tiles : %d ",dp[d^1][m]); printf(" "); } return 0; }