题目链接:压缩

  区间动归水题。稍微有一点细节。

  令\(f_{l,r}\)表示区间\([l,r]\)最短压缩长度,默认\(l\)位置之前有个\(M\)。然后就枚举一下放不放\(R\),\(M\)放哪个位置或者不放,记忆搜很好写。

  但是细节就在于,每个\(R\)的有效区间是到上一个\(M\),所以我们枚举在哪里放\(R\)之后,左边的区间内是不能放\(M\)的。所以在状态里多加一维,表示当前这个区间内能不能放\(M\),直接转移就行了。

  下面贴代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define N 61 using namespace std;
typedef long long llg; char s[N];
int f[N][N][2]; bool pd(int l,int r){
for(int i=l,j=r;i<r;i++,j++)
if(s[i]!=s[j]) return 0;
return 1;
} int gi(int l,int r,bool w);
int dfs(int l,int r,bool w){
if(f[l][r][w]) return f[l][r][w];
int now=r-l+1,mid=(l+r+1)>>1;
for(int i=l+1;i<=mid;i++)
if(pd(l,i)) now=min(now,dfs(l,i-1,0)+gi(i*2-l,r,w)+1);
if(w) for(int i=l+1;i<=r;i++) now=min(now,dfs(l,i-1,1)+gi(i,r,1));
return f[l][r][w]=now;
} int gi(int l,int r,bool w){
if(l>r) return 0; int now=r-l+1;
if(w) now=min(now,dfs(l,r,1)+1);
return now;
} int main(){
File("a");
scanf("%s",s+1);
printf("%d",dfs(1,strlen(s+1),1));
return 0;
}

BZOJ 1068 【SCOI2007】 压缩的更多相关文章

  1. bzoj 1068: [SCOI2007]压缩 DP

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

  2. [BZOJ 1068] [SCOI2007] 压缩 【记忆化搜索】

    题目链接:BZOJ - 1068 题目分析 这种记忆化搜索(区间 DP) 之前就做过类似的,也是字符串压缩问题,不过这道题稍微复杂一些. 需要注意如果某一段是 S1S1 重复,那么可以变成 M + S ...

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

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

  4. BZOJ 1068: [SCOI2007]压缩

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

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

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

  6. 【BZOJ】1068: [SCOI2007]压缩(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1068 发现如果只设一维的话无法转移 那么我们开第二维,发现对于前i个来说,如果确定了M在哪里,第i个 ...

  7. 1068: [SCOI2007]压缩 - BZOJ

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

  8. 1068: [SCOI2007]压缩

    题解: 区间DP 考虑状态的设计: \(dp[i][j][0/1]\)表示原字符串的\(i-j\)区间有无在中间加\(M\).并且默认在\(i\)之前加入\(M\)压缩后的最小长度,显然有转移: \[ ...

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

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

  10. BZOJ1068: [SCOI2007]压缩

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

随机推荐

  1. union 类型(即sum types)在golang语言中的实现

    http://www.jerf.org/iri/post/2917 Sum Types in Go posted Jun 02, 2013 in Programming, Golang, Haskel ...

  2. mybatis中获取参数

    1.${parameter}方式: parameter是数字时用:模糊查询%${parameter}%时用. 例:select * from account where userId = ${para ...

  3. Jquery map()

    <!DOCTYPE html> <html> <head> <style>p { color:red; }</style> <scri ...

  4. 集成学习ensemble

    集成学习里面在不知道g的情况下边学习边融合有两大派:Bagging和Boosting,每一派都有其代表性算法,这里给出一个大纲. 先来说下Bagging和Boosting之间的相同点:都是不知道g,和 ...

  5. 7.5 Models -- Persisting Records

    一.概述 1. 在Ember Data上以每个实例为基础,records被持久化.在DS.Model的任何一个实例上调用save()并且它将产生一个网络请求. 2. 下面是一些例子: var post ...

  6. unp第七章补充之socket tcp 产生 rst响应的情况

    socket tcp 产生 rst响应的情况(属于硬错误) 1.     syn发送到服务器主机,但是目的端口并未运行.则产生一个ECONRFUSED错误.客户端立即返回.比如telnet 192.1 ...

  7. ACM 未解决的问题

    还没有搞定的ACM问题列表. google code jam Round1A Round1B Round1C Round2 Round3 Onsite Finals 百度之星 一.资格赛题目: dis ...

  8. cocos代码研究(2)Label学习笔记

    理论部分 Label类继承自Node类,中文翻译文字与字体,通常在应用开发中为模块作为提示和描述的作用,主要有3中不同的创建方式. 1.通过ttf字体包创建,通过指定本地已有的ttf格式的字体文件,创 ...

  9. SV搭建验证环境

    1)首先定义纯虚类Sv_object,主要实现下边两个function: 定义local static 变量nextobjectID; 虚方法 virtual function void copy(S ...

  10. pyDay3

    内容来自廖雪峰的官方网站 1.关键字参数 def person(**kw): print(kw) >>> person(name=') {'} 关键字参数有什么用?它可以扩展函数的功 ...