IT民工
加油!
#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简单一些。

 

posted on 2011-11-30 18:43  找回失去的  阅读(237)  评论(0编辑  收藏  举报