zoukankan      html  css  js  c++  java
  • bzoj1068[SCOI2007]压缩

    1068: [SCOI2007]压缩

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 1561  Solved: 992
    [Submit][Status][Discuss]

    Description

      给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息。压缩后的字符串除了小
    写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位置左边没
    有M,则从串的开始算起)开始的解压结果(称为缓冲串)。 bcdcdcdcd可以压缩为bMcdRR,下面是解压缩的过程

     

      另一个例子是abcabcdabcabcdxyxyz可以被压缩为abcRdRMxyRz。

    Input

      输入仅一行,包含待压缩字符串,仅包含小写字母,长度为n。

    Output

      输出仅一行,即压缩后字符串的最短长度。

    Sample Input

    bcdcdcdcdxcdcdcdcd

    Sample Output

    12

    HINT

    在第一个例子中,解为aaaRa,在第二个例子中,解为bMcdRRxMcdRR。 

    【限制】 

    100%的数据满足:1<=n<=50 100%的数据满足:1<=n<=50

    f[l][r][0/1]表示原串l到r区间在区间内是否放置M的最短长度
    转移还是挺好转移的,切成两半考虑
    如果现在的区间内有一个M,那么可以在区间中间取一个断点再加一个M然后递归子区间考虑
    如果区间之内没有M,说明这个串是要被拿去重复的部分,再加M就会出错,只考虑切开处理看能否用区间之前放置的M再压缩区间
    如果这个区间是某个串重复了2次,拆开,把后面看成R,前面放置一个M且前一半子区间内不能再有M

     1 #include<bits/stdc++.h>
     2 #define N 55
     3 using namespace std;
     4 int f[N][N][2],len;
     5 char s[N];
     6 
     7 bool cmp(int l,int r){
     8     if((r-l+1)&1)return 0;
     9     int p=(l+r)>>1;
    10     for(int i=l;i<=p;i++)
    11     if(s[i]!=s[p+i-l+1])return 0;
    12     return 1;
    13 }
    14 int dp(int l,int r,int st){
    15     if(l==r)return 1;
    16     if(~f[l][r][st])return f[l][r][st];
    17     int &res=f[l][r][st];res=r-l+1;
    18     if(st)for(int i=l;i<r;++i)res=min(res,dp(l,i,1)+1+dp(i+1,r,1));
    19     for(int i=l;i<r;++i)res=min(res,dp(l,i,st)+r-i);
    20     if(cmp(l,r))res=min(res,dp(l,(l+r)>>1,0)+1);
    21     return res;
    22 }
    23 
    24 int main(){
    25     memset(f,-1,sizeof(f));
    26     scanf("%s",s+1);len=strlen(s+1);
    27     printf("%d
    ",dp(1,len,1));
    28     return 0;
    29 }
  • 相关阅读:
    失业状态,整理一下近期的面试问题 -- 直面自我
    nginx 学习 查一天不如问一句
    (10)kendo UI使用基础介绍与问题整理——MultiSelect
    kendo常用的实用方法(肯定有用得上的)
    (9)kendo UI使用基础介绍与问题整理——numerictextbox/基础说明
    去掉小数点后无效的0
    cmakelists编写样例
    visio 设计
    优化压测
    (转)语音处理基础知识
  • 原文地址:https://www.cnblogs.com/wsy01/p/8324638.html
Copyright © 2011-2022 走看看