题目大意:该题描述巨长,本质实际就是求两组字符串最长公共子序列长度,以#字符结束输入
解题策略:赤裸裸的DP
/*
UVA 10192 Vacation
AC by J.Dark
ON 2013/3/5
Time 0.056s
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 1010
char s1[MAXN], s2[MAXN];
int dp[MAXN][MAXN];
int max( int a, int b)
{
return a > b ? a : b;
}
int main()
{
int count1 = 0;
while( gets(s1 + 1) != NULL)
{
if(s1[1] == '#') break;
gets( s2 + 1);
int len1 = strlen(s1 + 1);
int len2 = strlen(s2 + 1);
memset( dp, 0, sizeof dp);
for( int i = 1; i <= len1; i ++){
for( int j = 1; j <= len2; j ++)
{
if( s1[i] == s2[j])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max( dp[i - 1][j], dp[i][j - 1]);
}
}
printf("Case #%d: you can visit at most %d cities.\n", ++count1, dp[len1][len2]);
}
return 0;
}