[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]字符串折叠相关推荐

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

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

  2. BZOJ 1090: [SCOI2003]字符串折叠

    Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1916 Solved: 1257 [Submit][Status][Discuss] Descript ...

  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. Luogu 2470 [SCOI2007]压缩

    和Luogu 4302 [SCOI2003]字符串折叠 差不多的想法,区间dp 为了计算方便,我们可以假设区间[l, r]的前面放了一个M,设$f_{i, j, 0/1}$表示区间$[i, j]$中是 ...

  7. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  8. BZOJ ac100题存档

    不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...

  9. P2400 秘密文件(区间dp)

    P2400 秘密文件(区间dp) 两个相邻的缩短串拼接后仍然是缩短串. 本身是周期串也可以缩短. 不难发现是区间dp. 拼接缩短 自身缩短 输出答案维护ans(i,j)ans(i,j)ans(i,j) ...

最新文章

  1. SHA204A加密芯片配置
  2. System Center Data Protection Manager 2007补助说明
  3. 博弈论经典算法(一)——对抗搜索与Alpha-Beta剪枝
  4. PE文件数据结构汇总
  5. 夏日防晒护肤经验心得与大家分享 - 生活至上,美容至尚!
  6. r.java没有生成_R.java 常见问题(R.java文件没有生成 )
  7. 计算机网络管理员中级第一套理论,计算机网络管理员第一套(中级)理论.doc
  8. linux怎样自动检查link文件_怎样理解和识别 Linux 中的文件类型 | Linux 中国
  9. java 七巧板油漆问题_七巧板颜色填充的问题?
  10. C++:函数指针是个什么玩意儿?
  11. Redis发布订阅和Stream
  12. lua正则替换_Lua 语言如何替换多个可选字符串
  13. java bio例子_传统的BIO
  14. 《遥感原理与应用》孙家抦版知识点总结(含简答题)——第二章
  15. VB 注册ocx控件的方法
  16. 浏览器禁用第三方Cookie
  17. Excel 2013 查找和替换单元格内换行回车
  18. 职场必备:十句外企 office 常用英语
  19. [转帖]龙芯下一代处理器微结构GS464E细节曝光
  20. 拼图游戏java(三)实现鼠标点击图片上下左右移动

热门文章

  1. 自律的程度,决定你人生的高度
  2. 159个故事串起三千年大历史!这套“儿童版史记”太无敌了!
  3. 50万年薪程序员,被百万网民怒喷后,却迎来大撕逼
  4. data:text/html firefox钓鱼,JS DataURL 整理(一)
  5. 升级总代分享思路_桃生企业至尊七郎瓷砖新展厅全新升级惊艳亮相
  6. 蓝桥杯java龟兔赛跑_算法-蓝桥杯习题(一)
  7. java junit4_JUnit4使用Java5中的单元测试
  8. suse linux 文件只可读,SUSE LINUX下文件系统变只读的问题解决
  9. java实用教程——组件及事件处理——概述
  10. 10-3 5-3 查询生产最高速度的计算机(PC或便携式电脑)厂商 (20 分)