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’, BB’,则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]字符串折叠相关推荐

  1. BZOJ 1090: [SCOI2003]字符串折叠 区间DP

    1090: [SCOI2003]字符串折叠 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  2. [SCOI2003]字符串折叠

    [SCOI2003]字符串折叠 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 折叠的定义 ...

  3. 洛谷·[SCOI2003]字符串折叠

    初见安~这里是传送门:洛谷 P4302 题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS-S ...

  4. 【ZJ选讲·字符串折叠】

    给一个字符串(len<=100) 把这个字符串折叠(就是压缩) 记 X(子串) 表示重复 X次该子串 比如 3(orz)  orzorzorz  来点神奇例子: AAAAAAAAAA ...

  5. P4302-[SCOI2003]字符串折叠【区间dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4302 题目大意 一个字符串,对于一个字符串AAA.可以将连续的nnn个AAA缩成n(A)n(A)n(A).求最短 ...

  6. 简单高精度模板(bzoj 1089: [SCOI2003]严格n元树)

    1089: [SCOI2003]严格n元树 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 1831  Solved: 913 [Submit][Sta ...

  7. BZOJ 1091([SCOI2003]分割多边形-分割直线)

    1091: [SCOI2003]分割多边形 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 223  Solved: 82 [Submit][Statu ...

  8. BZOJ 1856: [Scoi2010]字符串 [Catalan数]

    1856: [Scoi2010]字符串 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1418  Solved: 790 [Submit][Status ...

  9. ●BZOJ 4556 [Tjoi2016Heoi2016]字符串

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4556 题解: 巨恶心...但是题很好呀,可以练习好几个比较麻烦的算法~ 1).预处理 首先用 ...

最新文章

  1. 【神经网络】(17) EfficientNet 代码复现,网络解析,附Tensorflow完整代码
  2. python 利用numpy进行数据分析
  3. OO Unit 3 JML
  4. linux拉取指定时间内,Linux 日期和时间操作详解
  5. 利用子网掩码划分子网
  6. vue 实现文本的拖拽_基于Vue实现拖拽功能
  7. 提高MySQL性能的方法
  8. 计算机科学与技术实践教学,浅谈计算机科学与技术实践教学体系
  9. oracle如何修改字段为空的为0,Oracle中字段为空处理成0
  10. python byte什么意思_python bytes是什么
  11. 荷兰量子生态联盟投资110万欧元开发超导量子处理器
  12. ai旋转扭曲_AI变换及旋转图形工具详解
  13. 浏览器ocx控件安装 IE浏览器可用
  14. 阿里云 ECS windows服务器创建+部署+域名
  15. 小米手机 开发app python_一篇文章教会你用Python多线程获取小米应用商店App
  16. html怎么做整个屏幕的遮罩,html遮罩实现
  17. Linux 大数据(hadoop)
  18. 在linux安装pyrit
  19. 2022年分体式平价蓝牙耳机,性价比高的蓝牙耳机学生党排行
  20. 计算机专业英语祈使句,英语祈使句有哪几种结构

热门文章

  1. JAVA面向对象OOP→继承extends、构造方法super、方法重写override、样例代码
  2. JavaScript数据类型之比较运算符(8)
  3. 多时隙编码aloha(MuSCA)与编码时隙aloha(CSA)协议分析
  4. [蓝桥杯]试题 基础练习 Sine之舞
  5. bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士(BFS)
  6. 使用原生XMLHttpRequest对象演示ajax(Ajax)功能
  7. [debug] you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake ……
  8. matlab2c使用c++实现matlab函数系列教程-sortrows函数
  9. Echarts数据可视化parallel平行坐标系,开发全解+完美注释
  10. JavaSE学习笔记(七)—— 继承final关键字