/**
题目:hihoCoder #1320 : 压缩字符串
链接:https://hihocoder.com/problemset/problem/1320
描述
小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串。他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示。
例如AAAAAAAAAABABABCCD可以用10(A)2(BA)B2(C)D表示。
此外,这种压缩方法是可以嵌套的,例如HIHOHIHOCODERHIHOHIHOCODER可以表示成2(2(HIHO)CODER)。
对于一个字符串 S ,合法的压缩表示可能有很多种。例如AAAAAAAAAABABABCCD还可以表示成9(A)3(AB)CCD。
小Hi希望知道其中最短的表示方法长度是多少。
输入
第一行一个正整数 T (1 ≤ T ≤ 10),表示测试数据的组数。
以下 T 行每行一个字符串 S ,长度不超过100。
输出
对于每组数据,输出最短的表示方法的长度。 思路:区间dp,定义dp[i][j]表示区间[i,j]压缩最小长度。
终止条件,容易推得长度<=4的区间最短长度就是区间长度。
如果长度>4.那么如果当前字符串是周期字符串,那么显然是可以合并越多越好,即:如果全部都是相同的,那么就全部合并起来。
所以从区间长度的约数由小到大找满足的周期。然后合并。
如果找不到,那么切割成两部分。 */
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<cctype>
#include<set>
#include<cstring>
#include<cmath>
using namespace std;
typedef pair<int,int> P;
typedef long long LL;
const int N = ;
const int mod = ;
const int INF = 0x3f3f3f3f;
int dp[N][N];
char s[N];
vector<int> v[N];
void init()
{
for(int i = ; i < N; i++){
for(int j = ; j < i; j++){
if(i%j==){
v[i].push_back(j);
}
}
}
}
bool cmp(int l,int r,int l2,int r2)
{
for(int i = l, j = l2; i < r; i++, j++){
if(s[i]!=s[j]) return false;
}
return true;
}
int getLen(int x)
{
int cnt = ;
while(x){
x/=; cnt++;
}
return cnt;
}
int dfs(int l,int r)
{
if(r-l+<=) return r-l+;
int &res = dp[l][r];
if(~res) return res;
int len = r-l+;
int n = v[len].size();
for(int i = ; i < n; i++){///划分段数
int d = v[len][i]; ///S = [l,l+d);
int j;
for(j = l+d; j <= r; j+=d){///T = [l+d,l+2d);
if(cmp(l,l+d,j,j+d)==false) break;///不匹配。
}
if(j>r){
return res = getLen(len/d)++dfs(l,l+d-);
}
}
res = INF;
for(int i = l; i < r; i++){
res = min(res,dfs(l,i)+dfs(i+,r));
}
return res;
}
int main()
{
int T;
init();
cin>>T;
while(T--)
{
scanf("%s",s);
memset(dp, -, sizeof dp);
printf("%d\n",dfs(,strlen(s)-));
}
return ;
}

hihoCoder #1320 : 压缩字符串 区间dp的更多相关文章

  1. hihocoder 1320 压缩字符串(字符串+dp)

    题解: 其实就是对应三种dp的转移方式 1.拼接类型 dp[i][j] = dp[i][c] + dp[c][j] 2.不变类型 dp[i][j] = j-i+1 3.重复类型(必须满足有k个循环节) ...

  2. hihocoder 1320 - 压缩字符串 - [hiho一下160周]

    这道题目可以说是一道非常好非常一颗赛艇的DP题了. 需要注意的是,其中情形3),字符串必然能完全转化为 N(str)形式,如果有N(str1)M(str2)等等另外样式,应该首先使用拼接形式对其进行划 ...

  3. [SCOI2007]压缩(动态规划,区间dp,字符串哈希)

    [SCOI2007]压缩 状态:设\(dp[i][j]\)表示前i个字符,最后一个\(M\)放置在\(j\)位置之后的最短字串长度. 转移有三类,用刷表法来实现. 第一种是直接往压缩串后面填字符,这样 ...

  4. 字符串折叠&压缩(区间DP)

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

  5. 1068. [SCOI2007]压缩【区间DP】

    Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上 ...

  6. [SCOI2007]压缩(区间dp)

    神仙题,看了半天题解才看明白... 因为题目里说如果没有m,会自动默认m在最前面. 我们设计状态为dp[l][r][0/1]为在区间l到r中有没有m的最小长度. 转移:枚举我们要压缩的起点,dp[l] ...

  7. BZOJ1068 [SCOI2007]压缩 【区间dp】

    题目 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位 ...

  8. bzoj 1068: [SCOI2007]压缩【区间dp】

    神区间dp 设f[l][r][0]为在l到r中压缩的第一个字符为M,并且区间内只有这一个M,f[l][r][0]为在l到r中压缩的第一个字符为M,并且区间内有两个及以上的M 然后显然的转移是f[i][ ...

  9. hihocoder 1829 - 压缩字符串 - [状压+暴力枚举][2018ICPC北京网络预赛B题]

    题目链接:https://hihocoder.com/problemset/problem/1829 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, ...

随机推荐

  1. 【JavaScript】ReactJS基础

    初探React,将我们的View标签化 前言 我之前喜欢玩一款游戏:全民飞机大战,而且有点痴迷其中,如果你想站在游戏的第一阶梯,便需要不断的练技术练装备,但是腾讯的游戏一般而言是有点恶心的,他会不断的 ...

  2. ssh认证

    密钥认证 密码验证会造成账户口令的外泄,不安全,基于账号的保密性考虑,可以采用密钥验证实现远程连接. Linux--Linux 1.Linux客户端主机上生成密钥文件 ssh-keygen -t rs ...

  3. redis学习笔记——expire、pexpire、expireat、pexpireat的执行过程

    这里主要讲的Redis是怎么样设置过期键的,可以算作后续"Redis过期键的删除策略"的前篇或者说预备知识. 在了解过期键问题前我们首先需要对redis的数据库和数据库键空间有一定 ...

  4. PHP Warning exec() has been disabled for security reasons怎么办

    如果是PHPNOW,还是找到php-apache2handler.ini这个文件,把禁用的函数去掉即可. 注意是这个文件夹

  5. Win7如何修改文件夹的默认视图,如何把详细信息改为平铺视图

    先任意进入一个文件夹,右击选择平铺视图.   然后点击左上角的组织,文件夹和搜索选项,在文件夹选项的查看中点击"应用到文件夹",然后点击确定,弹出对话框,再确定.   随后再浏览别 ...

  6. iOS Mapkit 定位REGcode地理位置偏移

    在iOS上,使用系统Mapkit定位,获取到的坐标会有偏移: 今有需求,用系统Mapkit定位,并Regcode出实际地理位置,修正偏移: 解决方案: 使用MapView的代理 - (void)map ...

  7. Windows最强ssh客户端推荐 —— Bitvise SSH Client

    原名Tunnelier,解除它是因为为了sshFQ,没想到它既有SSH Terminal,又集成SFTP,还能FQ,功能一应区全. 还支持pem证书,回想最初使用putty,还要把pem证书进行转换才 ...

  8. Java设计模式(十) 备忘录模式 状态模式

    (十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(Stri ...

  9. webDriver API——第7部分Desired Capabilities

    The Desired Capabilities implementation. class selenium.webdriver.common.desired_capabilities.Desire ...

  10. 关于bitmap recycle trying to use a recycled bitmap android.graphics.Bitmap

    在开发中,一直使用4.0以上手机作为測试机所以一直没有出现这个问题,今天换了2.3版本号的手机.出现了这个错误: trying to use a recycled bitmap android.gra ...