【BZOJ1090】【SCOI2003】字符串折叠 {区间dp}
来源:互联网 发布:上帝悖论 知乎 编辑:程序博客网 时间:2024/05/22 13:16
【题目描述】
折叠的定义如下: 1. 一个字符串可以看成它自身的折叠。记作S S 2. X(S)是X(X>1)个S连接在一起的串的折叠。记作X(S)SSSS…S(X个S)。 3. 如果Aa, Bb,则ABab。例如,因为3(A)=AAA, 2(B)=BB,所以3(A)C2(B)AAACBB,而2(3(A)C)2(B)AAACAAACBB 给一个字符串,求它的最短折叠。例如AAAAAAAAAABABABCCD的最短折叠为:9(A)3(AB)CCD。【Sample Input】
(仅一行,即字符串S,长度保证不超过100。)
NEERCYESYESYESNEERCYESYESYES【Sample Output】
(仅一行,即最短的折叠长度。)
14【样例解释】
一个最短的折叠为:2(NEERC3(YES))
【题解】经典区间dp~~~
{状态} f[i][j]:i~j段合并的最短长度;
{方程} 分情况讨论:
<1>当前段可分为 i~k 和 k+1~j 两段:
f[i][j]=min(f[i][k]+f[k+1][j]);
<2>在当前段内存在一个位置k,使得 i~k 为 k+1~j 的重复片段:f[i][j]=min(f[i][k]+2+calc((j-k)/(k-i+1)+1)),其中函数calc(x)计算的是x的位数。
#include <cstdio>#include <iostream>#include <cstring>using namespace std;int n,f[105][105];char s[105]; bool check(int x,int y,int z) { if ((z-y)%(y-x+1)) return false; int p=x; for (int i=y+1;i<=z;++i) { if (s[i]!=s[p]) return false; if (++p>y) p=x; } return true; } int calc(int x) { int bit=0; for (;x;x/=10) ++bit; return bit; }int main(){ freopen("a.in","r",stdin); scanf("%s\n",s+1);n=strlen(s+1); for (int i=1;i<=n;++i) for (int j=i;j<=n;++j) f[i][j]=j-i+1; for (int i=n;i;--i) for (int j=i+1;j<=n;++j) for (int k=i;k<j;++k) { f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]); if (check(i,k,j)) f[i][j]=min(f[i][j],f[i][k]+2+calc((j-k)/(k-i+1)+1)); } printf("%d\n",f[1][n]); return 0;}
0 0
- 【BZOJ1090】[SCOI2003]字符串折叠【区间DP】
- BZOJ1090: [SCOI2003]字符串折叠 区间DP
- 【BZOJ1090】【SCOI2003】字符串折叠 {区间dp}
- BZOJ1090(SCOI2003)[字符串折叠]--区间DP
- bzoj1090: [SCOI2003]字符串折叠 dp
- [DP] BZOJ1090: [SCOI2003]字符串折叠
- 【BZOJ1090 || SCOI2003】字符串折叠
- bzoj1090: [SCOI2003]字符串折叠
- bzoj1090[SCOI2003]字符串折叠
- bzoj1090 [SCOI2003]字符串折叠
- bzoj1090 [SCOI2003]字符串折叠
- BZOJ1090 [SCOI2003]字符串折叠
- 【bzoj1090】[SCOI2003]字符串折叠
- bzoj1090(区间dp,字符串折叠问题)
- BZOJ 1090 [SCOI2003]字符串折叠 区间DP
- 1090: [SCOI2003]字符串折叠 区间DP
- 【bzoj 1090】[SCOI2003]字符串折叠 区间dp
- [BZOJ]1090: [SCOI2003]字符串折叠 区间DP
- asp.net中使用ado.net语言连接数据库
- 读取坐标数据并标记
- 查看http参数等
- Socket.IO学习之基础入门
- Unity 实现像LOL选择皮肤效果(卡片抽换效果)的制作思路
- 【BZOJ1090】【SCOI2003】字符串折叠 {区间dp}
- 关于App启动时出现黑屏或者白屏的现象
- 重启tomcat会导致session消失
- Linux之—网络通信(TCP/IP)
- 如何定义一个不能被继承的类
- Codeforces 631C Report排序+思维
- Sublime text 主题设置丨配置
- 课堂问题1108
- 寻找代表元(匈牙利算法)