[BZOJ1068/Luogu2470][SCOI2007]压缩
题目链接:
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]压缩相关推荐
- BZOJ1068:[SCOI2007]压缩——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1068 Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复 ...
- BZOJ 1068: [SCOI2007]压缩
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1493 Solved: 941 [Submit][Status ...
- Luogu 2470 [SCOI2007]压缩
和Luogu 4302 [SCOI2003]字符串折叠 差不多的想法,区间dp 为了计算方便,我们可以假设区间[l, r]的前面放了一个M,设$f_{i, j, 0/1}$表示区间$[i, j]$中是 ...
- luogu P2470 [SCOI2007]压缩
传送门 dalao们怎么状态都设的两维以上啊?qwq 完全可以一维状态的说 设\(f[i]\)为前缀i的答案,转移就枚举从前面哪里转移过来\(f[i]=min(f[j-1]+w(j,i))(j\in ...
- BZOJ第一页刷题计划
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...
- 2019.4.summary
2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...
- OI 刷题记录——每周更新
每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...
- 一句话题解(20180210~)
2.9 BZOJ 2006 [NOI2010]超级钢琴.这道题目几天之前就做了.做法是固定右端点,左端点在ST表上走,走法其实就是笛卡尔树的走法.完结撒花! BZOJ 1218 [HNOI2003]激 ...
- 压缩[SCOI2007]
题目描述 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前 ...
最新文章
- python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...
- ubuntu 安装ImageMagic
- TensorFlow 自动文本摘要生成模型,2016
- javascript对象和json字符串之间转换的问题
- iconfont 图标宽高出问题_一个技巧,100,000,000+PPT图标就可以任性使用!【黑科技第11期】...
- 如何让 Spring Boot 启动的更快?
- 汇编跳转比较用的列表
- Gmail邮箱添加域名解析
- idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题
- JDBC的DML增删改查的代码重构设计(上)
- 修改支付宝账号的授权方式
- Luogu2467 SDOI2010 地精部落 DP
- ORB-SLAM 解读(六)ORB特征点构建BoW
- VLAN虚拟局域网详解
- “搏一搏,单车变摩托
- Bilibili缓存视频在电脑端直接打开方式
- Android添加图片水印
- 用c++从头开始实现决策树
- BLE 技术(四)--- 链路层五种通信模式和空口协议设计 (Core_v5.2)
- Github标星超7k!从零开始,最简明扼要的数据科学学习路径
热门文章
- python编程入门经典 评分-豆瓣评分爆炸!Python+机器学习经典图书
- python常用指令-Pytes及Allure常用命令
- python科学计算基础教程pdf下载-用Python做科学计算 高清晰PDF
- python怎么安装matplotlib-python安装matplotlib
- python爬虫流程-Python爬虫程序架构和运行流程原理解析
- python的none是什么-python中的null与none有什么区别
- python从入门到放弃图片大全-Python 从入门到放弃(一)
- python文件可以用什么软件打开-py文件用什么可以打开.
- 零基础是学java还是python-零基础学编程java和python哪个好
- python装饰器-Python @函数装饰器及用法(超级详细)