[SCOI2003]字符串折叠
[SCOI2003]字符串折叠
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
折叠的定义如下:
一个字符串可以看成它自身的折叠。记作S = S X(S)是X(X>1)个S连接在一起的串的折叠。记作X(S) = SSSS…S(X个S)。
如果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。
输入描述:
仅一行,即字符串S,长度保证不超过100。
输出描述:
仅一行,即最短的折叠长度。
示例1
输入
复制
NEERCYESYESYESNEERCYESYESYES
输出
复制
14
题解:
菜。。。我太菜了
dp[l][r]表示l~r的最短折叠长度
dp[l][r]=min(r-l+1,dp[l][k]+dp[k+1][r]) l<=k<r
当区间[k+1,r]可以由区间[l,k]重复时,dp[l][r]=min(dp[l][r],dp[l][k]+2+calc((r-l+1)/(k-l+1))
2是指 括号 占的位数
calc是指系数所占位数
最终答案是dp[0][len-1]
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=140;
int dp[maxn][maxn];
bool vis[maxn][maxn];
char s[maxn];
bool check(int l,int r,int cl,int cr)
{if((r-l+1)%(cr-cl+1)!=0)return false;for(int i=l;i<=r;i++){if(s[i]!=s[(i-l)%(cr-cl+1)+cl])return false;}return true;
}
int calc(int x)//x是几位数
{int ans=0;while(x){x/=10;ans++;} return ans;
}int dfs(int l,int r)
{if(l==r)return 1;if(vis[l][r])return dp[l][r];vis[l][r]=true;dp[l][r]=r-l+1;for(int i=l;i<r;i++){dp[l][r]=min(dp[l][r],dfs(l,i)+dfs(i+1,r));if(check(i+1,r,l,i)){dp[l][r]=min(dp[l][r],dfs(l,i)+2+calc((r-i)/(i-l+1)+1));}}return dp[l][r];
}
int main()
{//cin>>s;scanf("%s",s); int sum=dfs(0,strlen(s)-1);cout<<sum;
}
[SCOI2003]字符串折叠相关推荐
- BZOJ 1090: [SCOI2003]字符串折叠 区间DP
1090: [SCOI2003]字符串折叠 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 1090: [SCOI2003]字符串折叠
Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1916 Solved: 1257 [Submit][Status][Discuss] Descript ...
- 洛谷·[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).求最短 ...
- Luogu 2470 [SCOI2007]压缩
和Luogu 4302 [SCOI2003]字符串折叠 差不多的想法,区间dp 为了计算方便,我们可以假设区间[l, r]的前面放了一个M,设$f_{i, j, 0/1}$表示区间$[i, j]$中是 ...
- 2019.4.summary
2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...
- BZOJ ac100题存档
不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...
- P2400 秘密文件(区间dp)
P2400 秘密文件(区间dp) 两个相邻的缩短串拼接后仍然是缩短串. 本身是周期串也可以缩短. 不难发现是区间dp. 拼接缩短 自身缩短 输出答案维护ans(i,j)ans(i,j)ans(i,j) ...
最新文章
- SHA204A加密芯片配置
- System Center Data Protection Manager 2007补助说明
- 博弈论经典算法(一)——对抗搜索与Alpha-Beta剪枝
- PE文件数据结构汇总
- 夏日防晒护肤经验心得与大家分享 - 生活至上,美容至尚!
- r.java没有生成_R.java 常见问题(R.java文件没有生成 )
- 计算机网络管理员中级第一套理论,计算机网络管理员第一套(中级)理论.doc
- linux怎样自动检查link文件_怎样理解和识别 Linux 中的文件类型 | Linux 中国
- java 七巧板油漆问题_七巧板颜色填充的问题?
- C++:函数指针是个什么玩意儿?
- Redis发布订阅和Stream
- lua正则替换_Lua 语言如何替换多个可选字符串
- java bio例子_传统的BIO
- 《遥感原理与应用》孙家抦版知识点总结(含简答题)——第二章
- VB 注册ocx控件的方法
- 浏览器禁用第三方Cookie
- Excel 2013 查找和替换单元格内换行回车
- 职场必备:十句外企 office 常用英语
- [转帖]龙芯下一代处理器微结构GS464E细节曝光
- 拼图游戏java(三)实现鼠标点击图片上下左右移动
热门文章
- 自律的程度,决定你人生的高度
- 159个故事串起三千年大历史!这套“儿童版史记”太无敌了!
- 50万年薪程序员,被百万网民怒喷后,却迎来大撕逼
- data:text/html firefox钓鱼,JS DataURL 整理(一)
- 升级总代分享思路_桃生企业至尊七郎瓷砖新展厅全新升级惊艳亮相
- 蓝桥杯java龟兔赛跑_算法-蓝桥杯习题(一)
- java junit4_JUnit4使用Java5中的单元测试
- suse linux 文件只可读,SUSE LINUX下文件系统变只读的问题解决
- java实用教程——组件及事件处理——概述
- 10-3 5-3 查询生产最高速度的计算机(PC或便携式电脑)厂商 (20 分)