欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ1068


题目概括

  (其实是复制的)

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

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


题解

  这又是一道字符串的题目。

  记得有人说过——字符串的题目就是哈希+乱搞????

  言归正传:

  一看就是一道区间动归。

  所以我们用:

    g[i][j]表示禁止更新缓冲,但是允许解压R的情况 (最短值)
    f[i][j]表示允许更新缓冲,但是禁止解压R的情况 (最短值)

  于是只需要写两个记忆化dfs就可以了。

  具体操作看代码。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=+;
char str[N];
int n,g[N][N],f[N][N];
// g[i][j]表示禁止更新缓冲,但是允许解压R的情况
// f[i][j]表示允许更新缓冲,但是禁止解压R的情况
bool can_fold[N][N];
bool fold_check(int L,int R){
int len=R-L+;
if (len&)
return ;
int M=L+len/;
for (int i=;i<len/;i++)
if (str[L+i]!=str[M+i])
return ;
return ;
}
int G(int L,int R){
if (L>R)
return ;
if (g[L][R]!=-)
return g[L][R];
g[L][R]=R-L+;
for (int i=;L+i*-<=R;i++){
int M=L+i*-;
if (can_fold[L][M])
g[L][R]=min(g[L][R],G(L,L+i-)++(R-M));
}
return g[L][R];
}
int F(int L,int R){
if (L>R)
return ;
if (f[L][R]!=-)
return f[L][R];
f[L][R]=G(L,R);
for (int i=L;i<=R;i++)
f[L][R]=min(f[L][R],min(G(L,i)++F(i+,R),G(L,i)+(R-i)));
return f[L][R];
}
int main(){
scanf("%s",str+);
n=strlen(str+);
memset(can_fold,,sizeof can_fold);
for (int i=;i<=n;i++)
for (int j=i;j<=n;j++)
can_fold[i][j]=fold_check(i,j);
memset(f,-,sizeof f);
memset(g,-,sizeof g);
for (int i=;i<=n;i++)
f[i][i]=g[i][i]=;
printf("%d",F(,n));
return ;
}

BZOJ1068 [SCOI2007]压缩 区间动态规划 字符串的更多相关文章

  1. 【BZOJ1068】压缩(动态规划)

    [BZOJ1068]压缩(动态规划) 题面 BZOJ 洛谷 题解 比较简单的\(dp\) 设\(f[i][j]\)表示当前已经匹配到了原串的第\(i\)个位置,上一个\(M\)在第\(j\)个字符之后 ...

  2. BZOJ1068 [SCOI2007]压缩 【区间dp】

    题目 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位 ...

  3. 【BZOJ-1068】压缩 区间DP

    1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1001  Solved: 615[Submit][Status][ ...

  4. bzoj 1068 [SCOI2007]压缩 区间dp

    [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1644  Solved: 1042[Submit][Status][Discu ...

  5. BZOJ1068: [SCOI2007]压缩

    ... 1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 909  Solved: 566[Submit][Statu ...

  6. B1068 [SCOI2007]压缩 区间dp

    这个题我状态想对了,但是转移错了...dp的代码难度都不大,但是思考含量太高了..不会啊,我太菜了. 其实这个题就是一个正常的区间dp,中间多了一个特判的转移就行了. 题干: Description ...

  7. 2018.10.20 bzoj1068: [SCOI2007]压缩(区间dp)

    传送门 这题转移很妙啊. f[l][r][1/0]f[l][r][1/0]f[l][r][1/0]表示对于区间[l,r][l,r][l,r]有/无重复的机会时压缩的最小值. 那么可以从三种情况转移过来 ...

  8. 洛谷P2470 [SCOI2007]压缩(区间dp)

    题意 题目链接 Sol 神仙题Orz 考虑区间dp,如果我们只设\(f[l][r]\)表示\(s_{lr}\)被压缩的最小长度,而不去关心内部\(M\)分布的话,可能在转移的时候转移出非法状态 因此考 ...

  9. BZOJ1090 [SCOI2003]字符串折叠 区间动态规划 字符串

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1090 题意概括 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S 2. X(S)是X ...

随机推荐

  1. Spring中的Bean配置

    IOC&DI概述 OPC(Inversion of Control):其思想是反转资源获取的方向.传统的资源查找方式要求组件向容器发起请求查找资源.作为回应,容器适时的返回资源.而应用了IOC ...

  2. Jquery 获取radio选中值

  3. Anaconda的安装和更新

    下载地址官网:https://www.anaconda.com/distribution/ 一.安装 二.下载安装完成后我们来检验一下是否安装成功 点击“开始” —— “Anaconda3(64-bi ...

  4. slf4j的简单用法以及与log4j的区别

    之前在项目中用的日志记录器都是log4j的日志记录器,可是到了新公司发现都是slf4j,于是想着研究一下slf4j的用法. 注意:每次引入Logger的时候注意引入的jar包,因为有Logger的包太 ...

  5. 【ARTS】01_09_左耳听风-20190107~20190113

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. /etc/profile 路径出错后相关的命令失效解决方式

    关于 Linux 的配置文件 /etc/profile 路径出错后相关的命令失效解决方式(如:ls,vi不能用) 今天学习LINUX 下配置jdk 和安装tomcat 通过VI编辑/etc/profi ...

  7. Linux系统编程【转】

    转自:https://blog.csdn.net/majiakun1/article/details/8558308 一.Linux系统编程概论 1.1 系统编程基石 syscall: libc:标准 ...

  8. Linux动态频率调节系统CPUFreq之一:概述【转】-- 非常好的博客

    转自:http://blog.csdn.net/droidphone/article/details/9346981     目录(?)[-] sysfs接口 软件架构 cpufreq_policy ...

  9. ansible报错Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this

    安装和配置好ansible,执行命令时报错如下 [root@test01 ansible-install]# ansible test -m shell -a 'w' >> Using a ...

  10. zabbix3.0使用ss命令对tcp连接数和状态的监控性能优化

    zabbix3.0对tcp连接数及状态的监控优化 之前对tcp的监控采用netstat命令,发现在服务器繁忙的时候效果不理想,这个命令占用大量的cpu有时候高达90%以上,可能会导致业务的不稳定,所以 ...