#include<stdio.h>
#include<string.h>
#define MAXD 105
int a[MAXD], b[MAXD];
int d[MAXD][MAXD];
int N1, N2;
int max( int a, int b)
{
return a > b ? a : b;
}
void init()
{
for( int i = 1; i <= N1; i ++)
scanf( "%d", &a[i]);
for( int i = 1; i <= N2; i ++)
scanf( "%d", &b[i]);
}
void dp()
{
memset( d, 0, sizeof d);
for( int i = 1; i <= N1; i ++)
for( int j = 1; j <= N2; j ++)
{
d[i][j] = max( d[i - 1][j], d[i][j - 1]);
if( a[i] == b[j])
d[i][j] = max( d[i][j], d[i -1][j -1] + 1);
}
}
int main()
{
int cas = 0;
while( true)
{
scanf( "%d%d", &N1, &N2);
if( N1 == 0 && N2 == 0) break;
init();
dp();
printf( "Twin Towers #%d\n", ++cas);
printf( "Number of Tiles : %d\n\n", d[N1][N2]);
}
return 0;
}
依然是最长公共子序列,比111简单一些。