2018.10.20 bzoj1068: [SCOI2007]压缩(区间dp)
传送门
这题转移很妙啊。
f[l][r][1/0]f[l][r][1/0]f[l][r][1/0]表示对于区间[l,r][l,r][l,r]有/无重复的机会时压缩的最小值。
那么可以从三种情况转移过来。
- 当前区间允许重复时,分成两段分别压缩且两段都可以重复,那么为了不使前后发生冲突中间断开时需要加一个MMM。
- 只压缩前面一段,后面一段不动。
- 如果当前区间能被分成两端一样的前面一段不压缩,后面一段重复前面的。
代码:
#include<bits/stdc++.h>
using namespace std;
int len,f[55][55][2];
char s[55];
inline bool check(int l,int r){
int mid=(r-l+1)/2;
if((r-l+1)&1)return 0;
for(int i=l;i<=(l+r)/2;++i)if(s[i]!=s[i+mid])return 0;
return 1;
}
inline int dfs(int l,int r,bool op){
if(~f[l][r][op])return f[l][r][op];
if(l==r)return f[l][r][op]=1;
f[l][r][op]=r-l+1;
if(op)for(int i=l;i<r;++i)f[l][r][op]=min(f[l][r][op],dfs(l,i,1)+1+dfs(i+1,r,1));
for(int i=l;i<r;++i)f[l][r][op]=min(f[l][r][op],dfs(l,i,op)+r-i);
if(check(l,r))f[l][r][op]=min(f[l][r][op],dfs(l,(l+r)/2,0)+1);
return f[l][r][op];
}
int main(){
memset(f,-1,sizeof(f)),scanf("%s",s+1),len=strlen(s+1);
cout<<dfs(1,len,1);
return 0;
}
2018.10.20 bzoj1068: [SCOI2007]压缩(区间dp)的更多相关文章
- 【BZOJ-1068】压缩 区间DP
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1001 Solved: 615[Submit][Status][ ...
- 洛谷P2470 [SCOI2007]压缩(区间dp)
题意 题目链接 Sol 神仙题Orz 考虑区间dp,如果我们只设\(f[l][r]\)表示\(s_{lr}\)被压缩的最小长度,而不去关心内部\(M\)分布的话,可能在转移的时候转移出非法状态 因此考 ...
- bzoj 1068 [SCOI2007]压缩 区间dp
[SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1644 Solved: 1042[Submit][Status][Discu ...
- B1068 [SCOI2007]压缩 区间dp
这个题我状态想对了,但是转移错了...dp的代码难度都不大,但是思考含量太高了..不会啊,我太菜了. 其实这个题就是一个正常的区间dp,中间多了一个特判的转移就行了. 题干: Description ...
- [SCOI2007]压缩 区间dp
明显是个区间dp,但是我区间dp就是个渣... f[i][j]表示区间i到j最短的字符长度:假设前面加了个M,所以初始化f[i][i]=2;当然最开始是不算M的,所以f[1][1]=1;然后就可以区间 ...
- 2018.10.23 hdu2476String painter(区间dp)
传送门 一道挺妙的区间dp. 我们先用区间dp求出第一个串为空串时的最小代价. 然后再加入原本的字符更新答案就行了. 代码: #include<bits/stdc++.h> using n ...
- 2018.10.23 hdu4745Two Rabbits(区间dp)
传送门 区间dp经典题目. 首先断环为链. 然后题目相当于就是在找最大的回文子序列. 注意两个位置重合的时候相当于范围是n,不重合时范围是n-1. 代码: #include<bits/stdc+ ...
- BZOJ1068 [SCOI2007]压缩 区间动态规划 字符串
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1068 题目概括 (其实是复制的) 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中 ...
- OSC Source Code Innovation Salon(2018.10.20)
时间:2018.10.20地点:北京 朝阳 浦项中心B座2层
随机推荐
- JAVA servlet 上传文件(commons-fileupload, commons-io)
<1>获取二进制文件流并输出 InputStream inputStream = request.getInputStream(); BufferedReader reader = new ...
- Eclipse在线安装STS插件
转自:https://blog.csdn.net/weixin_41987553/article/details/81091280 spring Boot是由Pivotal团队提供的全新框架,其设计目 ...
- Java工具类实现校验公民身份证的有效性
转自:https://www.oschina.net/code/snippet_1859292_39120 1 package com.tg.user.controller; import java. ...
- Windows 域用户
Windows 2000 组及说明 分类: Windows 2000 的组分为Security 和 Distribution 两种. Security 类型是Windows 2000 唯一用于赋予权限 ...
- python list()总结
# 1 列表的创建,用方括号表示[ ] name=['xiaolei','xiaoman','lixia','xiaolei'] # 2 列表的查询,通过索引值差值,第一位索引为0 #倒数第一个 ...
- sts,eclipse里面配置tomcat
第一步:点击window-->preferences-->server-->Runtime Environments点击add. 第二步:选择本机上面有的tomcat版本点击next ...
- sqlcmd导入大数据文件
sqlcmd导入大数据文件 SQLCMD 允许在Windows命令窗中通过命令行提示符运行脚本. 语法如下: sqlcmd [ { { -U <login id> [ -P <p ...
- How to read very large text files fast
Question Does anyone know the fastest way to read large text files (10Mb) into a string.Readln is ju ...
- linux kernel 的配置及编译
1. 执行make menuconfig 配置内核 2. 执行make zImage 编译内核 3. 执行make modules 编译模块 4. 内核源代码的配置及编译系统 Makefile Kco ...
- python -m
影响sys.path python xxx.py python -m xxx.py 这是两种加载py文件的方式:1叫做直接运行2把模块当作脚本来启动 直接启动是把脚本所在的目录放到了sys.path属 ...