IT民工
加油!

为了让父母都满意,所以只能选择他们给的建议中的相同的序列,即最长公共子序列,求长度并输出。

#include<stdio.h>
#include<string.h>
#define MAXD 105
char a[MAXD], b[MAXD];
int f[MAXD][MAXD], len1, len2;

int max( int a, int b)
{
return a > b ? a : b;
}

void dp()
{
len1 = strlen( a + 1), len2 = strlen( b + 1);
memset( f, 0, sizeof f);
for( int i = 1; i <= len1; i ++)
for( int j = 1; j <= len2; j ++)
{
f[i][j] = max( f[i - 1][j], f[i][j - 1]);
if( a[i] == b[j])
f[i][j] = max( f[i - 1][j - 1] + 1, f[i][j]);
}
}

int main()
{
int cas = 1;
while( gets( a + 1) != NULL, a[1] != '#')
{
gets( b + 1);
dp();
printf( "Case #%d: you can visit at most %d cities.\n", cas ++, f[len1][len2]);
}
return 0;
}

 

posted on 2011-12-04 23:51  找回失去的  阅读(249)  评论(0)    收藏  举报