题目链接:压缩

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

  令\(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. spring boot 使用静态资源

    ./ 当前目录../ 父级目录/ 根目录 spring boot 打包时: The default includes are as follows: 默认包括的文件 public/**, resour ...

  2. PAT 1066 Root of AVL Tree[AVL树][难]

    1066 Root of AVL Tree (25)(25 分) An AVL tree is a self-balancing binary search tree. In an AVL tree, ...

  3. Selenium - Xpath 使用方法

    由于最新版火狐不在支持FireBug等开发工具,可以通过https://ftp.mozilla.org/pub/firefox/releases/下载49版本以下的火狐就可以增加Firebug等扩展了 ...

  4. MVC备忘笔记

    1.增加样式 @Html.EditorFor(model => model.AssociationName, new { @class="inputtext input-220&quo ...

  5. C++中的访问权限

    C++中类的成员的权限: private:只能由该类的成员函数,友元函数访问,不能被该类的对象访问. protected:除了private外还能被子类的函数访问,同样不能被该类的对象访问. publ ...

  6. form表单提交 type="submit"

    <form action=""  method="post" onsubmit="return validte()"> < ...

  7. zw版【转发·台湾nvp系列Delphi例程】HALCON MirrorImage

    zw版[转发·台湾nvp系列Delphi例程]HALCON MirrorImage procedure TForm1.Button1Click(Sender: TObject);var img, im ...

  8. 调用spark API,监控任务的进度

    我们现在需要监控datapre0这个任务每一次执行的进度,操作如下: 1. 如图所示,打开spark管理页面,找到对应的任务,点击任务名datapre0 2. 进去之后,获得对应IP和端口  3. 访 ...

  9. outlook还原初始设置

    找到outlook的安装地址: C:\Program Files\Microsoft Office\Office15 进入命令行界面 WIN+R ->cmd cd C:\Program File ...

  10. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...