您的位置:首页 > 其它

poj1458(DP最长连续公共子序列)

2013-05-30 10:57 316 查看
记住动态方程就好了。。

还一个问题就是这题的dp[][]数组不能开太大我一直开的是dp[1010][1010]一直WA就是不知道原因,把这个问题改成dp[1010][101]就行了。。无语。。

#include<stdio.h>

#include<string.h>

char s1[1010],s2[1010];

int dp[1010][101];

int max(int x,int y)

{

return x>y?x:y;

}

int main()

{

memset(s1,0,sizeof(s1));

memset(s2,0,sizeof(s2));

while(scanf("%s %s",s1,s2)!=EOF)

{

int a,b;

a=strlen(s1);

b=strlen(s2);

int i,j;

memset(dp,0,sizeof(dp));

for(i=0;i<a;i++)

{

for(j=0;j<b;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("%d\n",dp[a-1][b-1]);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: