为了让父母都满意,所以只能选择他们给的建议中的相同的序列,即最长公共子序列,求长度并输出。
#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;
}
浙公网安备 33010602011771号