HDU 1513 最长公共子序列拓展DP

来源:互联网 发布:java nestedinteger 编辑:程序博客网 时间:2024/06/10 08:28
将原字符串倒置,然后与原字符串求最长公共子序列,

  ans=n-dp[n][n]。 用滚动数组


#include "stdio.h"#include "string.h"#include "math.h"int n;char str[5010],str1[5010];int dp[2][5010];int find(){    int i,j,a;    memset(dp,0,sizeof(dp));    for (i=1;i<=n;i++)    {        a=i%2;        for (j=1;j<=n;j++)        {            if (str[i-1]==str1[j-1])                dp[a][j]=dp[1-a][j-1]+1;            else             {                if (dp[1-a][j]>dp[a][j-1])                    dp[a][j]=dp[1-a][j];                else                     dp[a][j]=dp[a][j-1];            }        }    }    return dp[n%2][n];}int main(){    while (scanf("%d",&n)!=EOF)    {        getchar();        gets(str);        strcpy(str1,str);        strrev(str1);        printf("%d\n",n-find());    }    return 0;}


0 0
原创粉丝点击