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

另一个例子是abcabcdabcabcdxyxyz可以被压缩为abcRdRMxyRz。
输入格式
输入仅一行,包含待压缩字符串,仅包含小写字母,长度为n。
输出格式
输出仅一行,即压缩后字符串的最短长度。
输入样例
bcdcdcdcdxcdcdcdcd
输出样例
12
提示
在第一个例子中,解为aaaRa,在第二个例子中,解为bMcdRRxMcdRR。
【限制】
100%的数据满足:1<=n<=50 100%的数据满足:1<=n<=50
题解
我们可以看做最左端有一个M
我们设\(f[l][r][0|1]\)表示区间\([l,r]\)在开头有M的情况下,区间内有\((1)\)或没有\((0)\)M的情况下的最短串
如果\([l,r]\)区间呈现\(AA\)形式,就可以令
\]
然后枚举区间断点:
\]
对于\(1\)的转移,我们枚举中间的M
\]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 55,maxm = 100005,INF = 1000000000;
int f[maxn][maxn][2],n;
char s[maxn];
bool check(int l,int r){
if ((r - l + 1) & 1) return false;
int mid = l + ((r - l + 1) >> 1) - 1;
for (int i = 0; l + i <= mid; i++) if (s[l + i] != s[mid + 1 + i])
return false;
return true;
}
int main(){
scanf("%s",s + 1); n = strlen(s + 1);
fill(f[0][0],f[0][0] + 2 * maxn * maxn,INF);
for (int i = 1; i <= n; i++) f[i][i][0] = 1;
for (int len = 2; len <= n; len++){
for (int i = 1; i + len - 1 <= n; i++){
int j = i + len - 1;
if (check(i,j)) f[i][j][0] = f[i][i + ((j - i + 1) >> 1) - 1][0] + 1;
for (int k = i; k < j; k++)
f[i][j][0] = min(f[i][j][0],f[i][k][0] + j - k);
for (int k = i; k < j; k++)
f[i][j][1] = min(f[i][j][1],min(f[i][k][1],f[i][k][0]) + 1 + min(f[k + 1][j][0],f[k + 1][j][1]));
}
}
printf("%d\n",min(f[1][n][0],f[1][n][1]));
return 0;
}
BZOJ1068 [SCOI2007]压缩 【区间dp】的更多相关文章
- 【BZOJ-1068】压缩 区间DP
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1001 Solved: 615[Submit][Status][ ...
- 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;然后就可以区间 ...
- 洛谷P2470 [SCOI2007]压缩(区间dp)
题意 题目链接 Sol 神仙题Orz 考虑区间dp,如果我们只设\(f[l][r]\)表示\(s_{lr}\)被压缩的最小长度,而不去关心内部\(M\)分布的话,可能在转移的时候转移出非法状态 因此考 ...
- BZOJ1068 [SCOI2007]压缩 区间动态规划 字符串
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1068 题目概括 (其实是复制的) 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中 ...
- ACM学习历程—HDU1584 蜘蛛牌(动态规划 && 状态压缩 || 区间DP)
Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起 ...
- 洛谷P2470||bzoj1068 [SCOI2007]压缩
bzoj1068 洛谷P2470 区间dp入门题?只要注意到每个M“管辖”的区间互不相交即可 错误记录:有点小坑,比如aaaacaaaac最优解为aRRcR(意会坑在哪里),踩了一次 #include ...
- BZOJ1068: [SCOI2007]压缩
... 1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 909 Solved: 566[Submit][Statu ...
- 状态压缩---区间dp第一题
标签: ACM 题目 Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is ...
随机推荐
- [学习笔记]Linux下mysql的基础操作
命令 #查看版本 mysql --version #进入mysql 命令 mysql -u root -p mysql -u root@localhost (没有密码的情况) #创建数据库 c ...
- 任务管理器 用 Ctrl + Shift + Esc 替换 Ctrl + Alt + Del
任务管理器 用 Ctrl + Shift + Esc 替换 Ctrl + Alt + Del
- Android开发出现 StackOverflowError
问题:StackOverflowError 在HTC或者摩托罗拉的手机上测试出现 StackOverflowError 的错误. 06-12 10:28:31.750: E/AndroidRuntim ...
- DROP GROUP - 删除一个用户组
SYNOPSIS DROP GROUP name DESCRIPTION 描述 DROP GROUP 从数据库中删除指定的组.组中的用户不被删除. 组中的用户不被删除. PARAMETERS 参数 n ...
- Google 出品的 Java 编码规范,强烈推荐,权威又科学!
原文:google.github.io/styleguide/javaguide.html 译者:Hawstein 来源:hawstein.com/2014/01/20/google-java-sty ...
- 【dp】守望者的逃离
妙 题目描述 恶魔猎手尤迪安野心勃勃,他背着了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快 ...
- Python爬虫系列-分析Ajax请求并抓取今日头条街拍图片
1.抓取索引页内容 利用requests请求目标站点,得到索引网页HTML代码,返回结果. 2.抓取详情页内容 解析返回结果,得到详情页的链接,并进一步抓取详情页的信息. 3.下载图片与保存数据库 将 ...
- vue组件:canvas实现图片涂鸦功能
方案背景 需求 需要对图片进行标注,导出图片. 需要标注N多图片最后同时保存. 需要根据多边形区域数据(区域.颜色.名称)标注. 对应方案 用canvas实现涂鸦.圆形.矩形的绘制,最终生成图片bas ...
- PHP安装Xcache扩展
简述 XCache 是一个又快又稳定的 PHP opcode 缓存器. 经过良好的测试并在大流量/高负载的生产机器上稳定运行. 经过(在 linux 上)测试并支持所有现行 PHP 分支的最新发布 ...
- paper:synthesizable finit state machine design techniques using the new systemverilog 3.0 enhancements之onehot coding styles(index-parameter style with registered outputs)
case语句中,对于state/next 矢量仅仅做了1-bit比较. parameter 值不是表示FSM的状态编码,而是表示state/next变量的索引.