UVA10066
/*
最长公共子序列
*/
#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\n",++num);
printf("Number of Tiles : %d\n",dp[d^1][m]);
printf("\n");
}
return 0;
}

浙公网安备 33010602011771号