最长公共子序列..
下标开始的时候弄错了...囧.....
#include<stdio.h>
#include<string.h>
int dp[600][600];
char a[600];
char b[600];
int n;
int m;
int kk=0;
void ini()
{
for(int i=0;i<65;++i)
{
for(int j=0;j<65;++j)
{
dp[i][j]=0;
}
}
}
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
void solve()
{
ini();
while(1)
{
gets(a);
if(strcmp(a,"#")==0)
return ;
gets(b);
m=strlen(a);
n=strlen(b);
for(int i=1;i<=m;++i)
{
for(int j=1;j<=n;++j)
{
if(a[i-1]&&a[i-1]==b[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;//这个。。。又蒙圈了。。。
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
++kk;
printf("Case #%d: you can visit at most %d cities.\n",kk,dp[m][n]);
}
}
int main()
{
solve();
return 0;
}