hdu1513Palindrome【最长公共子序列&滚动数组】

来源:互联网 发布:千里眼远程监控软件 编辑:程序博客网 时间:2024/06/05 18:24

问加几个字符能变成回文串==赤裸裸的LCS 而且都不用记录路径 MLE了两发才意识到真的得用滚动数组==

/************hdu15132016.2.12483MS1616K975 BG++************/#include <iostream>#include<cstdio>#include<cstring>using namespace std;int c[2][5005],n,sum;char x[5005],y[5005];void cal(){    memset(c,0,sizeof(c));    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            if(x[i-1]==y[j-1])            {                c[i&1][j]=c[(i-1)&1][j-1]+1;               // b[i][j]=0;            }            else if(c[(i-1)&1][j]>c[i&1][j-1])            {                c[i&1][j]=c[(i-1)&1][j];                //b[i][j]=1;            }            else            {                c[i&1][j]=c[i&1][j-1];                //b[i][j]=-1;            }        }    }}int main(){   // freopen("cin.txt","r",stdin);    while(~scanf("%d",&n))    {        scanf("%s",x);        for(int i=0;i<n;i++) y[n-i-1]=x[i];        sum=0;        cal();        printf("%d\n",(n-c[n&1][n]));    }    return 0;}


0 0
原创粉丝点击