题目描述  给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息。压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位置左边没有M,则从串的开始算起)开始的解压结果(称为缓冲串)。 bcdcdcdcd可以压缩为bMcdRR,下面是解压缩的过程

另一个例子是abcabcdabcabcdxyxyz可以被压缩为abcRdRMxyRz。

输入

输入仅一行,包含待压缩字符串,仅包含小写字母,长度为n。

输出

输出仅一行,即压缩后字符串的最短长度。

样例输入

bcdcdcdcdxcdcdcdcd

样例输出

12
题解   把题目读懂就挺不容易的。。。考试的时候读了很久的题,很久没做过区间dp,没想到正解。大致写了一下每一位的值可以怎么得到,就被循环节给绕进去了。因为没有细致做这道题,样例也没有手动分析。下午改题之前动手模拟了一个测试点,就对“重复”这个定义的理解深了很多。
f[i][j]表示i之前有一个重复开始,到j的最小长度。
f[i][i]=2;在i之前放置起点
bj(f[i][j],f[i][j-1]+1);确认之前更新的是否最优
bj(f[i][j*2-i+1],f[i][j]+1);如果循环在继续,以i到j为一个循环节更新下一个循环节
f[i][i]=1;起点本身没必要循环
之后再类似弗洛伊德确认各区间最优值bj(f[i][j],f[i][k]+f[k+1][j]);
结果即为f[0][n-1];
关于dp还是要有更抽象的概念,如果纠结于细节就会越绕越深。要善于抓住问题的关键,列出状态,否则真是没办法做。对于和字符串有关的题一直觉得难做,其实也是因为不擅长把字符转化成数之间的关系。只要找准状态,严格按照状态设计程序,dp应该是有规律可循的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int n,f[][];
string a;
bool d;
void bj(int &x,int y)
{
x=x<y?x:y;
}
int main()
{
freopen("compress.in","r",stdin);
freopen("compress.out","w",stdout);
memset(f,0x3f,sizeof(f));
cin>>a;
n=a.size();
for(int i=;i<n;i++)
{
f[i][i]=;
if(i==) f[i][i]=;
for(int j=i+;j<n;j++)
{
bj(f[i][j],f[i][j-]+);
if(j*-i+<n)
{
d=;
for(int k=;k<=j-i;k++)
if(a[i+k]!=a[j+k+])
{
d=;
break;
}
if(d)
bj(f[i][j*-i+],f[i][j]+);
}
}
f[i][i]=;
}
for(int i=;i<n;i++)
for(int j=i;j<n;j++)
for(int k=i;k<=j;k++)
bj(f[i][j],f[i][k]+f[k+][j]);
printf("%d",f[][n-]);
//while(1);
return ;
}
 

压缩[SCOI2007]的更多相关文章

  1. BZOJ1068: [SCOI2007]压缩

    ... 1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 909  Solved: 566[Submit][Statu ...

  2. bzoj 1068: [SCOI2007]压缩 DP

    1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 496  Solved: 315[Submit][Status] D ...

  3. bzoj 1068 [SCOI2007]压缩 区间dp

    [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1644  Solved: 1042[Submit][Status][Discu ...

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

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

  5. BZOJ 1068: [SCOI2007]压缩

    Sol 区间DP.这个区间DP需要三维, \(f[i][j][k]\) 表示\([i,j]\) 这个区间中是否存在 \(M\) . 转移有两种,一种是这个区间存在 \(M\) ,那么直接枚举 \(M\ ...

  6. BZOJ 1072: [SCOI2007]排列perm 状态压缩DP

    1072: [SCOI2007]排列perm Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为 ...

  7. 【BZOJ 1068】[SCOI2007]压缩

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

  8. 1068: [SCOI2007]压缩 - BZOJ

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

  9. bzoj1068:[SCOI2007]压缩

    思路:区间dp,设状态f[l][r][bo]表示区间[l,r]的答案,bo=1表示该区间可以放M也可以不放M,bo=0表示该区间不能放M,并且对于任意一个状态f,l和l-1之间均有一个M,于是就可以进 ...

随机推荐

  1. flask简单web应用

    推荐一个学习python的网站,个人觉得在这里面收获挺大的,希望对后来学习flask的小伙伴们有帮助.http://www.pythondoc.com/ 用flask框架实现第一个web应用 首先需要 ...

  2. 身份证识别OCR,开启视频模式扫一扫即可识别身份证信息

    文章摘要:身份证识别等证件识别OCR技术在各个行业得到广泛应用,例如:车险移动查勘会用到身份证识别.行驶证识别.车架号识别: 寿险移动展业会用到名片识别.银行卡识别:电信实名制代理网点采集身份证信息会 ...

  3. js返回顶部封装 简洁

    js返回顶部封装 简洁: 加入html页面body最后面即可. <script> a(); function a() { $(function() { if ($(".j-to- ...

  4. 闭包中this指向window的原因

    var t={ b:1, w:function a(){ var b=2; alert(this.b); //弹出t对象的b属性 alert(b); //弹出a函数的b变量 return functi ...

  5. 一张图搞定Java设计模式——工厂模式! 就问你要不要学!

    小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...

  6. VBS基本语法

    一.初识VBS Vbs       是一种变量无关.解释性执行的脚本语言.vbs语言中不区分大小写.语句以换行结束. dim        声明变量:批量名称声明,多个变量之间用逗号分隔: set   ...

  7. HTML RGB 颜色表 16进制表 颜色对应表

    HTML RGB 颜色表 16进制表 颜色对应表  16 常用颜色表(颜色 + RGB + 名字): Color Value Name   Color Value Name   #00FFFF aqu ...

  8. 虚函数&多态

    对于经常被问到的虚函数和多态的问题,发现百度百科回答得十分详细,所以自己在百度百科上的解释进行总结 一.虚函数 (1)虚函数简介:在某基类中声明为virtual并在一个或者多个派生类中被重新定义的成员 ...

  9. nodejs 实践:express 最佳实践 (一)

    express 最佳实践 (一) 最近,一直在使用 nodejs 做项目,对 nodejs 开发可以说深有体会. 先说说 nodejs 在业务中的脚色,, 在 web同构 方面, nodejs 的优势 ...

  10. HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配)

    HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配) Description The zoo have N cats and M dogs, toda ...