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

来源:互联网 发布:a开票软件 金税盘版 编辑:程序博客网 时间:2024/05/14 21:10

记住动态方程就好了。。

还一个问题就是这题的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;
}

原创粉丝点击