码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 1068

时间:2014-06-23 08:06:11      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   http   tar   get   

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1068

题意:字符串压缩。M表示一个重复串的开始,R表示与其前面一个M之间的重复。压缩出最短的串。

思路:f[i][j][0]还没有M,f[i][j][1]已经有M。

 

char s[N];


int ok(int L,int R)
{
    int M=(R-L+1)>>1;
    int i;
    for(i=0;i<M;i++) if(s[L+i]!=s[L+M+i]) return 0;
    return 1;
}


int f[N][N][2];


int DFS(int L,int R,int t)
{
    if(f[L][R][t]!=-1) return f[L][R][t];
    if(L==R) return f[L][R][t]=1;
    int x=R-L+1,len=x;
    int i;
    if(t)
    {
        for(i=L;i<R;i++) upMin(x,DFS(L,i,1)+1+DFS(i+1,R,1));
    }
    for(i=L;i<R;i++) upMin(x,DFS(L,i,t)+R-i);
    if(len%2==0&&ok(L,R)) upMin(x,DFS(L,L+len/2-1,0)+1);
    return f[L][R][t]=x;
}


int n;


int main()
{
    RD(s); n=strlen(s);
    clr(f,-1);
    PR(DFS(0,n-1,1));
}

 

 

 

BZOJ 1068,布布扣,bubuko.com

BZOJ 1068

标签:style   class   blog   http   tar   get   

原文地址:http://www.cnblogs.com/jianglangcaijin/p/3799434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!