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
",++num);
	  printf("Number of Tiles : %d
",dp[d^1][m]);
	    printf("
");
	}
	return 0;
}


原文地址:https://www.cnblogs.com/Opaser/p/3662023.html