BZOJ 1090: [SCOI2003]字符串折叠
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1916 Solved: 1257
[Submit][Status][Discuss]
Description
折叠的定义如下: 1. 一个字符串可以看成它自身的折叠。记作S S 2. X(S)是X(X>1)个S连接在一起的串的折叠。记作X(S) SSSS…S(X个S)。 3. 如果A A’, BB’,则AB A’B’ 例如,因为3(A) = AAA, 2(B) = BB,所以3(A)C2(B) AAACBB,而2(3(A)C)2(B)AAACAAACBB 给一个字符串,求它的最短折叠。例如AAAAAAAAAABABABCCD的最短折叠为:9(A)3(AB)CCD。
Input
仅一行,即字符串S,长度保证不超过100。
Output
仅一行,即最短的折叠长度。
Sample Input
NEERCYESYESYESNEERCYESYESYES
Sample Output
14
HINT
一个最短的折叠为:2(NEERC3(YES))
题解
区间dp,dp[i][j]表示区间[i,j]合并后的最小值。枚举时要先判断是否有可合并的串。
代码
#include<bits/stdc++.h>using namespace std;
const int MAXN = 105;char c[MAXN];
int dp[MAXN][MAXN],leen;inline bool judge(int x,int y,int z){for(int i=1;i<=leen;i++)for(int j=x+i-1;j+z<=y;j+=z)if(c[j]!=c[j+z]) return false;return true;
}inline int cal(int k){if(k==100) return 3;if(k/10!=0) return 2;return 1;
}int main(){scanf("%s",c+1);memset(dp,0x3f,sizeof(dp));leen=strlen(c+1);for(int i=0;i<=leen;i++)dp[i][i]=1;for(int l=0;l<=leen;l++)for(int i=1;i<=leen-l;i++){int j=i+l;for(int k=1;k<=(l+1)>>1;k++){ //枚举重复串的长度并判断是否合法。 if(judge(i,j,k) and (l+1)%k==0)dp[i][j]=min(dp[i][j],dp[i][k+i-1]+2+cal((l+1)/k)) ;}for(int k=i;k<j;k++) //枚举中间位置。 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);}
// for(register int i=1;i<=leen;i++)
// for(register int j=1;j<=leen;j++)
// cout<<dp[i][j]<<" ";cout<<dp[1][leen];return 0;
}
转载于:https://www.cnblogs.com/sdfzsyq/p/9677070.html
BZOJ 1090: [SCOI2003]字符串折叠相关推荐
- BZOJ 1090: [SCOI2003]字符串折叠 区间DP
1090: [SCOI2003]字符串折叠 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- [SCOI2003]字符串折叠
[SCOI2003]字符串折叠 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 折叠的定义 ...
- 洛谷·[SCOI2003]字符串折叠
初见安~这里是传送门:洛谷 P4302 题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS-S ...
- 【ZJ选讲·字符串折叠】
给一个字符串(len<=100) 把这个字符串折叠(就是压缩) 记 X(子串) 表示重复 X次该子串 比如 3(orz) orzorzorz 来点神奇例子: AAAAAAAAAA ...
- P4302-[SCOI2003]字符串折叠【区间dp】
正题 题目链接:https://www.luogu.com.cn/problem/P4302 题目大意 一个字符串,对于一个字符串AAA.可以将连续的nnn个AAA缩成n(A)n(A)n(A).求最短 ...
- 简单高精度模板(bzoj 1089: [SCOI2003]严格n元树)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 1831 Solved: 913 [Submit][Sta ...
- BZOJ 1091([SCOI2003]分割多边形-分割直线)
1091: [SCOI2003]分割多边形 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 223 Solved: 82 [Submit][Statu ...
- BZOJ 1856: [Scoi2010]字符串 [Catalan数]
1856: [Scoi2010]字符串 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1418 Solved: 790 [Submit][Status ...
- ●BZOJ 4556 [Tjoi2016Heoi2016]字符串
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4556 题解: 巨恶心...但是题很好呀,可以练习好几个比较麻烦的算法~ 1).预处理 首先用 ...
最新文章
- 【神经网络】(17) EfficientNet 代码复现,网络解析,附Tensorflow完整代码
- python 利用numpy进行数据分析
- OO Unit 3 JML
- linux拉取指定时间内,Linux 日期和时间操作详解
- 利用子网掩码划分子网
- vue 实现文本的拖拽_基于Vue实现拖拽功能
- 提高MySQL性能的方法
- 计算机科学与技术实践教学,浅谈计算机科学与技术实践教学体系
- oracle如何修改字段为空的为0,Oracle中字段为空处理成0
- python byte什么意思_python bytes是什么
- 荷兰量子生态联盟投资110万欧元开发超导量子处理器
- ai旋转扭曲_AI变换及旋转图形工具详解
- 浏览器ocx控件安装 IE浏览器可用
- 阿里云 ECS windows服务器创建+部署+域名
- 小米手机 开发app python_一篇文章教会你用Python多线程获取小米应用商店App
- html怎么做整个屏幕的遮罩,html遮罩实现
- Linux 大数据(hadoop)
- 在linux安装pyrit
- 2022年分体式平价蓝牙耳机,性价比高的蓝牙耳机学生党排行
- 计算机专业英语祈使句,英语祈使句有哪几种结构
热门文章
- JAVA面向对象OOP→继承extends、构造方法super、方法重写override、样例代码
- JavaScript数据类型之比较运算符(8)
- 多时隙编码aloha(MuSCA)与编码时隙aloha(CSA)协议分析
- [蓝桥杯]试题 基础练习 Sine之舞
- bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士(BFS)
- 使用原生XMLHttpRequest对象演示ajax(Ajax)功能
- [debug] you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake ……
- matlab2c使用c++实现matlab函数系列教程-sortrows函数
- Echarts数据可视化parallel平行坐标系,开发全解+完美注释
- JavaSE学习笔记(七)—— 继承final关键字