hihocoder 1320 压缩字符串(字符串+dp)
题解:
其实就是对应三种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)相关推荐
- Java后端压缩JSON字符串,前端使用pako.min.js解压
我在日常开发中遇到,由于后端返回JSON数据较大,导致前端响应的较慢,于是考虑通过后端压缩,前端解压的方式来进行优化: 后端压缩工具类: package com.stt.common.util;imp ...
- 空字符串字符串不为空_当字符串为空但不为空时
空字符串字符串不为空 介绍 我团队中的一名初级程序员遇到了一个有趣的错误. 我已经不止一次看到它的症状. 这篇文章是寻找什么以及如何在将来防止它. 我还将探讨该问题的不同解决方案. 病征 有问题的代码 ...
- linux 串口 字符 间隔,嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)...
嵌入式linux编程过成中用到zigbee模块 zigbee从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数 (提取特定字符串+字符串转16进制) #include #incl ...
- Python基础-字符串(字符串常用函数/操作/字符串遍历)
字符串就是一串字符, 表示文本类型的数据, 可以用"一对双引号"或者'一对单引号'定义一个字符串, 字符串定义格式为 字符串变量名 = '字符串的文本内容' 常用函数/操作 获取字 ...
- 嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)
嵌入式linux编程过成中用到zigbee模块 zigbee从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数 (提取特定字符串+字符串转16进制) #include<st ...
- Java · 认识 String 类(上)· 创建字符串 · 字符串比较相等 · 字符串常量池 · 字符串不可变 · 字符字节与字符串
目录 一.创建字符串 二.字符串比较相等 三.字符串常量池 3.1 直接赋值的内存情况 3.2 采用构造方法的内存情况 四.理解字符串不可变 五.字符.字节与字符串 5.1 字符与字符串 5.2 字节 ...
- java 输入一串字符串 字符串长度不超过100
题目 /*** 输入一串字符串* 字符串长度不超过100* 查找字符串中相同字符连续出现的最大次数* <p>* 输入描述* 输入只有一行,包含一个长度不超过100的字符串* <p&g ...
- 请使用指针的方法编写程序,程序的功能是从键盘输入一个字符串(字符串长度小于100),删除其中的字母a后输出。例如,输入字符串abcaca,输出bcc。
请使用指针的方法编写程序,程序的功能是从键盘输入一个字符串(字符串长度小于100),删除其中的字母a后输出.例如,输入字符串abcaca,输出bcc. 输入样例: abcaca 输出样例: bcc 代 ...
- js 改写对象转字符串 字符串转对象(不丢失对象方法)
js 改写对象(包括方法)转字符串 对象转字符串 字符串转对象 总结 js中将对象转化为字符串可以用JSON.stringify,字符串转对象可以用JSON.parse.这两个方法在大部分的情况下都很 ...
最新文章
- 新手学习单片机最常见的六大误区,你进坑了吗?
- 在Struts 2.0中国际化(i18n)您的应用程序
- Shell函数详解(函数定义、函数调用)
- mysql ERROR 1045 access denied for user 'root'@'localhost' using
- iphone开蓝牙wifi上网慢_为啥我开锁总是比别人慢?
- 系统服务器如何给指定磁盘扩容_刀片服务器如何选择操作系统?
- 同比 数据模型 环比_历史数据模型解决方案-历史数据模型解决方案
- OpenVINO 2019 R2.0 Custom Layer Implementation for linux(1)
- Unity Occlusion Culling 遮挡剔除研究
- .net EventHandler 事件处理
- linux:云端 ubuntu下挂载数据盘
- 华为手机计算机代码大全,华为手机指令代码大全,你想要了解的功能都在这里!...
- 如何在Windows Server 2003下安装NetBEUI
- 超简单APP图标制作
- 2021年新版阿里云服务器价格表(收费标准报价)
- mysql报错1194_ERROR 1194 (HY000): Table 't1' is marked as crashed and should be repaired
- Windows系统封装总结
- 计算机二级培训ppt,计算机二级PPT真题:科技政策培训PPT
- 简单枚举 / 枚举排列
- 做共享软件的一些心得与经验