题解:

其实就是对应三种dp的转移方式

1、拼接类型

dp[i][j] = dp[i][c] + dp[c][j]

2、不变类型

dp[i][j] = j-i+1

3、重复类型(必须满足有k个循环节)

dp[i][j] = width(k) + 2 + dp[i][i+L-1]

直接记忆化搜索即可,复杂度n^3logn(枚举循环节近似为logn)

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char S[110];
int dp[110][110];int width(int x){int l = 0;while(x) { l++; x /= 10; }return l;
}int dfs(int i, int j){if(i > j) return 0;if(dp[i][j] < 100) return dp[i][j];int L = j-i+1;if(L == 1) return 1;dp[i][j] = L;for(int c = i; c < j; c++) dp[i][j] = min(dp[i][j], dfs(i, c) + dfs(c+1, j));for(int k = 2; k <= L; k++){if(L % k != 0) continue;int l = L/k, f = 0;for(int t = 0; t < k-1 && !f; t++){for(int c = 0; c < l && !f; c++)if(S[i+l*t+c] != S[i+l*(t+1)+c]) f = 1;}if(!f) dp[i][j] = min(dp[i][j], width(k)+2+dfs(i, i+l-1));}return dp[i][j];
}int main()
{int T;cin>>T;while(T--){cin>>S;int n = strlen(S);memset(dp, 1, sizeof(dp));cout<<dfs(0, n-1)<<endl;}return 0;
}

转载于:https://www.cnblogs.com/Saurus/p/7374744.html

hihocoder 1320 压缩字符串(字符串+dp)相关推荐

  1. Java后端压缩JSON字符串,前端使用pako.min.js解压

    我在日常开发中遇到,由于后端返回JSON数据较大,导致前端响应的较慢,于是考虑通过后端压缩,前端解压的方式来进行优化: 后端压缩工具类: package com.stt.common.util;imp ...

  2. 空字符串字符串不为空_当字符串为空但不为空时

    空字符串字符串不为空 介绍 我团队中的一名初级程序员遇到了一个有趣的错误. 我已经不止一次看到它的症状. 这篇文章是寻找什么以及如何在将来防止它. 我还将探讨该问题的不同解决方案. 病征 有问题的代码 ...

  3. linux 串口 字符 间隔,嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)...

    嵌入式linux编程过成中用到zigbee模块 zigbee从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数 (提取特定字符串+字符串转16进制) #include #incl ...

  4. Python基础-字符串(字符串常用函数/操作/字符串遍历)

    字符串就是一串字符, 表示文本类型的数据, 可以用"一对双引号"或者'一对单引号'定义一个字符串, 字符串定义格式为 字符串变量名 = '字符串的文本内容' 常用函数/操作 获取字 ...

  5. 嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)

    嵌入式linux编程过成中用到zigbee模块 zigbee从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数 (提取特定字符串+字符串转16进制) #include<st ...

  6. Java · 认识 String 类(上)· 创建字符串 · 字符串比较相等 · 字符串常量池 · 字符串不可变 · 字符字节与字符串

    目录 一.创建字符串 二.字符串比较相等 三.字符串常量池 3.1 直接赋值的内存情况 3.2 采用构造方法的内存情况 四.理解字符串不可变 五.字符.字节与字符串 5.1 字符与字符串 5.2 字节 ...

  7. java 输入一串字符串 字符串长度不超过100

    题目 /*** 输入一串字符串* 字符串长度不超过100* 查找字符串中相同字符连续出现的最大次数* <p>* 输入描述* 输入只有一行,包含一个长度不超过100的字符串* <p&g ...

  8. 请使用指针的方法编写程序,程序的功能是从键盘输入一个字符串(字符串长度小于100),删除其中的字母a后输出。例如,输入字符串abcaca,输出bcc。

    请使用指针的方法编写程序,程序的功能是从键盘输入一个字符串(字符串长度小于100),删除其中的字母a后输出.例如,输入字符串abcaca,输出bcc. 输入样例: abcaca 输出样例: bcc 代 ...

  9. js 改写对象转字符串 字符串转对象(不丢失对象方法)

    js 改写对象(包括方法)转字符串 对象转字符串 字符串转对象 总结 js中将对象转化为字符串可以用JSON.stringify,字符串转对象可以用JSON.parse.这两个方法在大部分的情况下都很 ...

最新文章

  1. 新手学习单片机最常见的六大误区,你进坑了吗?
  2. 在Struts 2.0中国际化(i18n)您的应用程序
  3. Shell函数详解(函数定义、函数调用)
  4. mysql ERROR 1045 access denied for user 'root'@'localhost' using
  5. iphone开蓝牙wifi上网慢_为啥我开锁总是比别人慢?
  6. 系统服务器如何给指定磁盘扩容_刀片服务器如何选择操作系统?
  7. 同比 数据模型 环比_历史数据模型解决方案-历史数据模型解决方案
  8. OpenVINO 2019 R2.0 Custom Layer Implementation for linux(1)
  9. Unity Occlusion Culling 遮挡剔除研究
  10. .net EventHandler 事件处理
  11. linux:云端 ubuntu下挂载数据盘
  12. 华为手机计算机代码大全,华为手机指令代码大全,你想要了解的功能都在这里!...
  13. 如何在Windows Server 2003下安装NetBEUI
  14. 超简单APP图标制作
  15. 2021年新版阿里云服务器价格表(收费标准报价)
  16. mysql报错1194_ERROR 1194 (HY000): Table 't1' is marked as crashed and should be repaired
  17. Windows系统封装总结
  18. 计算机二级培训ppt,计算机二级PPT真题:科技政策培训PPT
  19. 简单枚举 / 枚举排列
  20. 做共享软件的一些心得与经验

热门文章

  1. sqlserver怎么将excel表的数据导入到数据库中
  2. CodeForces - 755C PolandBall and Forest (并查集)
  3. Akka Cluster原理与应用
  4. OC画笔CGContextRef
  5. Android SlidingMenu以及ActionBarSherlock的基础使用教程
  6. jaquery ready
  7. JAVA删除临时文件
  8. 互联网公司面试必问的mysql题目(下)
  9. Maven内置变量说明
  10. [转]JS设计模式-单例模式(二)