题目链接:

BZOJ1068

Luogu2470

区间\(DP\)。

设\(f_{[l][r]}\)?

但是转移时如果加一个\(R\)则无法知道上一个\(M\)在什么地方。

所以设\(f_{[l][r][0/1]}\)表示区间\([l,r]\),有一个\(M\)在开头,中间是否有其他\(M\)时的最小长度。

那么有转移方程:

\[f_{[l][r][0]}=\min_{i=l}^{r-1}\{f_{[l][i][0]}+r-i\}\]

由前后两段组成,后面不能有\(M\),所以长度不变。

\[f_{[l][r][0]}=f_{[l][(l+r)>>1][0]}+1\]

当区间\([l,r]\)是两个相同子串相连时可以用\(R\)表示。可以暴力判断

\[f_{[l][r][1]}=\min_{l=i}^{r-1}\{\min(f_{[l][i][0]},f_{[l][i][1]})+\min(f_{[i+1][r][0]},f_{[i+1][r][1]})\}\]

直接由两段拼成,每一段必须有\(M\)。

时间复杂度 \(O(n^3)\)

#include <cstdio>
#include <cstring>inline int Min(int a,int b){return a<b?a:b;}int n,f[55][55][2];
char s[55];inline bool Dou(int l,int r)//判断区间[l,r]是否是两个相同子串相连
{if((r-l+1)&1)return false;for(int i=l,j=(l+r+1)>>1;j<=r;++i,++j)if(s[i]!=s[j])return false;return true;
}int DP(int l,int r,int m)
{if(f[l][r][m])return f[l][r][m];if(l==r)return f[l][r][m]=2;int Res=0x3f3f3f3f;if(!m){if(Dou(l,r))Res=Min(Res,DP(l,(l+r)>>1,0)+1);for(int i=l;i<r;++i)Res=Min(Res,DP(l,i,0)+r-i);}elsefor(int i=l;i<r;++i)Res=Min(Res,Min(DP(l,i,0),DP(l,i,1))+Min(DP(i+1,r,0),DP(i+1,r,1)));return f[l][r][m]=Res;
}int main()
{scanf("%s",s+1),n=strlen(s+1);printf("%d\n",Min(DP(1,n,0),DP(1,n,1))-1);return 0;
}

转载于:https://www.cnblogs.com/LanrTabe/p/10197927.html

[BZOJ1068/Luogu2470][SCOI2007]压缩相关推荐

  1. BZOJ1068:[SCOI2007]压缩——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1068 Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复 ...

  2. BZOJ 1068: [SCOI2007]压缩

    1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1493  Solved: 941 [Submit][Status ...

  3. Luogu 2470 [SCOI2007]压缩

    和Luogu 4302 [SCOI2003]字符串折叠 差不多的想法,区间dp 为了计算方便,我们可以假设区间[l, r]的前面放了一个M,设$f_{i, j, 0/1}$表示区间$[i, j]$中是 ...

  4. luogu P2470 [SCOI2007]压缩

    传送门 dalao们怎么状态都设的两维以上啊?qwq 完全可以一维状态的说 设\(f[i]\)为前缀i的答案,转移就枚举从前面哪里转移过来\(f[i]=min(f[j-1]+w(j,i))(j\in ...

  5. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

  6. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  7. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

  8. 一句话题解(20180210~)

    2.9 BZOJ 2006 [NOI2010]超级钢琴.这道题目几天之前就做了.做法是固定右端点,左端点在ST表上走,走法其实就是笛卡尔树的走法.完结撒花! BZOJ 1218 [HNOI2003]激 ...

  9. 压缩[SCOI2007]

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

最新文章

  1. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...
  2. ubuntu 安装ImageMagic
  3. TensorFlow 自动文本摘要生成模型,2016
  4. javascript对象和json字符串之间转换的问题
  5. iconfont 图标宽高出问题_一个技巧,100,000,000+PPT图标就可以任性使用!【黑科技第11期】...
  6. 如何让 Spring Boot 启动的更快?
  7. 汇编跳转比较用的列表
  8. Gmail邮箱添加域名解析
  9. idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题
  10. JDBC的DML增删改查的代码重构设计(上)
  11. 修改支付宝账号的授权方式
  12. Luogu2467 SDOI2010 地精部落 DP
  13. ORB-SLAM 解读(六)ORB特征点构建BoW
  14. VLAN虚拟局域网详解
  15. “搏一搏,单车变摩托
  16. Bilibili缓存视频在电脑端直接打开方式
  17. Android添加图片水印
  18. 用c++从头开始实现决策树
  19. BLE 技术(四)--- 链路层五种通信模式和空口协议设计 (Core_v5.2)
  20. Github标星超7k!从零开始,最简明扼要的数据科学学习路径

热门文章

  1. python编程入门经典 评分-豆瓣评分爆炸!Python+机器学习经典图书
  2. python常用指令-Pytes及Allure常用命令
  3. python科学计算基础教程pdf下载-用Python做科学计算 高清晰PDF
  4. python怎么安装matplotlib-python安装matplotlib
  5. python爬虫流程-Python爬虫程序架构和运行流程原理解析
  6. python的none是什么-python中的null与none有什么区别
  7. python从入门到放弃图片大全-Python 从入门到放弃(一)
  8. python文件可以用什么软件打开-py文件用什么可以打开.
  9. 零基础是学java还是python-零基础学编程java和python哪个好
  10. python装饰器-Python @函数装饰器及用法(超级详细)