• [SCOI2003]字符串折叠


    一道蛮好玩的区间DP。。。其实只要做好check。。。然后统计答案就好了。。。QAQ。。。

    呆码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    char ch[110];
    int n,f[110][110];
    
    inline bool check(int x1,int y1,int x2,int y2)
    {
        if((y2-x1+1)%(y1-x1+1)!=0) return 0;
        int len=y1-x1+1;
        for(int i=x2;i<=y2;i++)
            if(ch[i-len]!=ch[i])
                return 0;
        return 1;
    }
    
    inline int num(int x)
    {
        int sum=0;
        while(x)
        {
            sum++;
            x/=10;
        }
        return sum;
    }
    
    int main()
    {
        scanf("%s",ch+1);
        n=strlen(ch+1);
        for(int i=1;i<=n;i++) f[i][i]=1;
        for(int i=n-1;i>=1;i--)
            for(int j=i+1;j<=n;j++)
            {
                f[i][j]=j-i+1;
                for(int k=i;k<=j;k++)
                {
                    if(check(i,k,k+1,j)) f[i][j]=min(f[i][j],f[i][k]+2+num((j-i+1)/(k-i+1)));
                    else f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
                }
            }
        printf("%d
    ",f[1][n]);
    }
    代码
  • 相关阅读:
    省选前模拟
    $SA$后缀数组
    一键运行
    多项式$fft$,$ntt$,$fwt$初步
    插头$DP$初步
    网络流初步
    欧拉路相关
    模板—Hash_map
    HZOJ Function
    HZOJ Tree
  • 原文地址:https://www.cnblogs.com/zzzyc/p/9302978.html
Copyright © 2020-2023  润新知