P4302 [SCOI2003]字符串折叠

题目描述

折叠的定义如下:

  1. 一个字符串可以看成它自身的折叠。记作S = S

  2. X(S)是X(X>1)个S连接在一起的串的折叠。记作X(S) = SSSS…S(X个S)。

  3. 如果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

输出样例#1:

14

说明

一个最短的折叠为:2(NEERC3(YES))

考试的题目,还不会区间dp,什么都不知道,考试的时候思路大概想到了,但是没有想到怎么实现。

用\(F[i][j]\)表示从第\(i\)个字符到第\(j\)个字符的最小长度。枚举中间断点,一定要先处理完中间才能处理两边,考试的时候就是不晓得怎么枚举(我还是太菜了)。

还有一点很容易错的,字符折叠起来前面的数字可能为不止占一位(如AAAAAAAAAA ---> 10(A))。

难点在于怎样判断折叠,看到网上很多大佬用%什么的很麻烦,其实我们只要算出折叠完后字母部分有多长,然后用当前位置减去长度就可以了。因为既然可以枚举到这里,那么前面一定保证了相同,这是我们没必要一定搞到第一个的位置去判断。具体看代码吧

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int len;
int f[110][110];
int dp[110];
char ch[110];
bool get(int x1,int y1,int x2,int y2)
{
if((y2-x1+1)%(y1-x1+1)!=0) return false;
int len=y1-x1+1;
for(int i=x2;i<=y2;i++)
{
if(ch[i]!=ch[i-len])
return false;
}
return true;
}
int cal(int k)
{
int qwe=0;
while(k)
{
qwe++;
k/=10;
}
return qwe;
}
int main()
{
//freopen("char.in","r",stdin);
//freopen("char.out","w",stdout);
memset(f,0x3f,sizeof(f));
cin>>ch;
len=strlen(ch);
for(int i=0;i<len;i++)f[i][i]=1;
for(int l=1;l<len;l++)
{
for(int i=0;i<len-l;i++)
{
int j=i+l;
f[i][j]=(j-i+1);
for(int k=i;k<j;k++)
{
if(!get(i,k,k+1,j))
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
else f[i][j]=min(f[i][j],f[i][k]+2+cal((l+1)/(k-i+1)));
//printf("f[%d][%d]=%d\n",i,j,f[i][j]);
}
}
}
cout<<f[0][len-1];
return 0;
}

[SCOI2003]字符串折叠(区间dp)的更多相关文章

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

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

  2. [SCOI2003]字符串折叠 (区间DP)

    题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS…S(X个S). 如果A = A’, B = ...

  3. B1090 [SCOI2003]字符串折叠 区间dp

    又一道区间dp,和上一篇类似,但是比他简单,这个只有两种转移方法,不是很复杂.直接判断是否为重复的串就行. 题干: Description 折叠的定义如下: . 一个字符串可以看成它自身的折叠.记作S ...

  4. 洛谷P4302 [SCOI2003]字符串折叠(区间dp)

    题意 题目链接 Sol 裸的区间dp. 转移的时候枚举一下断点.然后判断一下区间内的字符串是否循环即可 `cpp #include<bits/stdc++.h> #define Pair ...

  5. bzoj1090 [SCOI2003]字符串折叠——区间DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1090 区间DP... 代码如下: #include<iostream> #inc ...

  6. 【BZOJ-1090】字符串折叠 区间DP + Hash

    1090: [SCOI2003]字符串折叠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1127  Solved: 737[Submit][Stat ...

  7. 【洛谷 P4302】 [SCOI2003]字符串折叠(DP)

    题目链接 简单区间dp 令\(f[i][j]\)表示\([i,j]\)的最短长度 先枚举区间,然后在区间中枚举长度\(k\),看这个区间能不能折叠成几个长度为\(k\)的,如果能就更新答案. #inc ...

  8. BZOJ1090 [SCOI2003]字符串折叠 区间动态规划 字符串

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1090 题意概括 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S 2. X(S)是X ...

  9. BZOJ 1090 字符串折叠(区间DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1090 题意:字符串AAAAAAAAAABABABCCD的最短折叠为9(A)3(AB)CC ...

  10. 【BZOJ】1090: [SCOI2003]字符串折叠(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1090 随便yy一下.. 设f[i,j]表示i-j的最小长度 f[i, j]=min{j-i+1, f ...

随机推荐

  1. Nginx-常用命令和配置文件

    Nginx常用命令 1.启动命令 在/usr/local/nginx/sbin 目录下执行 ./nginx 2.关闭命令 在/usr/local/nginx/sbin 目录下执行 ./nginx s ...

  2. bootstrap 的布局

    第一步:你要做的就是选择适合你显示器的标签: .col-xs- 超小屏幕 手机 (<768px) .col-sm- 小屏幕 平板 (≥768px) .col-md- 中等屏幕 桌面显示器 (≥9 ...

  3. Python全栈开发,Day2

    一.Pycharm的使用 1.创建项目 2.python调整字体大小随ctrl+鼠标滚轮上下滚动 3.python新建程序自动补全编码和环境 4.设置断点(在代码前面行号后面单击鼠标左键) 5.调试断 ...

  4. hibernate插入中文字段时,无法插入数据库

    体现: hibernate插入数据时,一直报错: Caused by: java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4 ...

  5. (转)字符编码笔记:ASCII,Unicode 和 UTF-8

    转:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之 ...

  6. MySQL5.7.21报错:[Err] 1055

    [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c ...

  7. Not a Number (NaN)

    NaN can be produced by: 1. 0/0 2. Inf - Inf 3. Inf/Inf 4. 0*Inf 5. rem(x,y), where y=0 or x=Inf

  8. JPEG 存储分割后的图象会产生锯齿

    分割后的图象如果保存为 JPG 格式,物体边界会产生锯齿状的很暗的像素. 如下图所示. 这会给后续处理带了噪声, 因此,保存分割后的图象最好用无损压缩格式,如 bmp, png 等.

  9. day08—css布局解决方案之多列布局

    转行学开发,代码100天——2018-03-24 本文将记录CSS布局之垂直布局解决方案. 常见的多列布局包括以下: 1.定宽+自适应 2.两列定宽+一列自适应 3.不定宽+自适应 4.两列不定宽+一 ...

  10. centos 7 环境准备工作

    删除自带jdk: rpm -e --nodeps `rpm -qa | grep java` 打开 /etc/ 目录下的 profile 文件: vi /etc/profile 将如下代码追加到 pr ...