坑的一笔,我脑残了,一直wa,原来的代码是从0开始遍历,这样if (a[i]==b[j])dp[i][j]=dp[i-1][[j-1]就会数组下标越界,所以经过修改才正确.
附AC代码:
#include
#include
char a[505];
char b[505];
int dp[505][505];
int max(int c,int d)
{
return c>d?c:d;
}
int main()
{
int n,i,j,l1,l2;
while(scanf("%s%s",a+1,b+1)==2)
{
l1=strlen(a+1);
l2=strlen(b+1);
memset(dp,0,sizeof(dp));
for (i=1;i<=l1;i++)
for (j=1;j<=l2;j++)
if (a[i]==b[j])
dp[i][j]=dp[i-1][j-1]+1;
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
printf("%d\n",dp[l1][l2]);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
return 0;
}