这个题同样是求LCS,我用的n^2的方法,
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=110;
char stra[maxn],strb[maxn];
int dp[maxn][maxn];
int LCS()
{
memset(dp,0,sizeof(dp));
int lena=strlen(stra);
int lenb=strlen(strb);
for(int i=0;i<lena;i++)
for(int j=0;j<lenb;j++)
{
if(stra[i]==strb[j])
dp[i+1][j+1]=dp[i][j]+1;
else
dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
}
return dp[lena][lenb];
}
int main()
{
int cas=1;
while(gets(stra)!=NULL)
{
if(stra[0]=='#')
break;
gets(strb);
printf("Case #%d: you can visit at most %d cities.\n",cas++,LCS());
}
return 0;
}