题解 [SCOI2007]压缩
好题。
显然区间 dp,令 \(f_{l, r}\) 为 \([l, r]\) 之间的最短的长度。如果我们要压缩,那么就要考虑 M 与 R 的位置。由于我们大体是从左往右来转移的,所以显然我们只需要记录一下 M,R 是可以枚举的。令 \(f_{l, r, 0/1}\) 代表 \([l, r]\) 之间有没有 M 的最短长度。
我们默认 \((l - 1)\) 的位置上有一个 M。首先我们考虑放 R。显然我们可以只在 \(r + 1\) 的位置上放 R,我们判断一下 \([l, r]\) 区间左右两端是不是一样的,如果是,则有 \(f_{l, r, 0} = \min\{f_{l, mid, 0} + 1, f_{l, r, 0}\}\)。为什么不是 \(f_{mid + 1, r, 0} + 1\)?因为这个位置没有做到。
然后我们考虑平常的操作。对于 \(f_{l, r, 0}\),枚举 \(k\) 显然是 \(f_{l, r, 0} = \min\{f_{l, r, 0}, f_{l, k, 0} + r - k\}\)。\(f_{l, r, 1}\) 就枚举 \(k\) 作为加入 M 的地方,那么就是 \(f_{l, r, 1} = \min\{f_{l, r, 1}, \min\{f_{l, k, 0}, f_{l, k, 1}\} +\min\{f_{k + 1, r, 0}, f_{k + 1, r, 1}\} + 1\}\)。
然后就酱紫,就没了。
所以你会发现这题其实一点也不难,区间 dp 很一眼,状态也不难想,转移也很符合人类的逻辑。。。
em?em。。。
所以为什么 SX 在模拟赛没有想出来,,,?????????????
SXSB
//SIXIANG
#include <iostream>
#include <cstring>
#define MAXN 1000
#define QWQ cout << "QWQ" << endl;
using namespace std;
string str;
bool check(int l, int r) {
int len = (r - l + 1);
if(len & 1) return 0;
int mid = (r + l) / 2;
for(int p = l; p <= (r + l) / 2; p++)
if(str[p] != str[++mid])
return 0;
return 1;
}
int f[MAXN + 10][MAXN + 10][2];
int main() {
memset(f, 0x3f, sizeof(f));
int n; cin >> str;
n = str.size();
str = "$" + str;//CCF loves Monny $_$
for(int p = 1; p <= n; p++)
for(int i = p; i <= n; i++)
f[p][i][0] = f[p][i][1] = i - p + 1;
for(int len = 1; len <= n; len++) {
for(int l = 1; l + len - 1 <= n; l++) {
int r = l + len - 1;
if(check(l, r)) f[l][r][0] = min(f[l][r][0], 1 + f[l][(r + l) / 2][0]);
for(int k = l; k < r; k++) f[l][r][0] = min(f[l][r][0], f[l][k][0] + r - k);
for(int k = l; k < r; k++)
f[l][r][1] = min(f[l][r][1], min(f[l][k][0], f[l][k][1]) + min(f[k + 1][r][0], f[k + 1][r][1]) + 1);
}
}
cout << min(f[1][n][0], f[1][n][1]) << endl;
}
话说这个我交到 darkbzoj 上炸了诶 qaq。
题解 [SCOI2007]压缩的更多相关文章
- bzoj 1068 [SCOI2007]压缩 区间dp
[SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1644 Solved: 1042[Submit][Status][Discu ...
- BZOJ1068: [SCOI2007]压缩
... 1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 909 Solved: 566[Submit][Statu ...
- bzoj 1068: [SCOI2007]压缩 DP
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 496 Solved: 315[Submit][Status] D ...
- [SCOI2007]压缩(动态规划,区间dp,字符串哈希)
[SCOI2007]压缩 状态:设\(dp[i][j]\)表示前i个字符,最后一个\(M\)放置在\(j\)位置之后的最短字串长度. 转移有三类,用刷表法来实现. 第一种是直接往压缩串后面填字符,这样 ...
- BZOJ1068:[SCOI2007]压缩——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1068 Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复 ...
- 1068: [SCOI2007]压缩
题解: 区间DP 考虑状态的设计: \(dp[i][j][0/1]\)表示原字符串的\(i-j\)区间有无在中间加\(M\).并且默认在\(i\)之前加入\(M\)压缩后的最小长度,显然有转移: \[ ...
- [SCOI2007]压缩(区间dp)
神仙题,看了半天题解才看明白... 因为题目里说如果没有m,会自动默认m在最前面. 我们设计状态为dp[l][r][0/1]为在区间l到r中有没有m的最小长度. 转移:枚举我们要压缩的起点,dp[l] ...
- BZOJ1068 [SCOI2007]压缩 区间动态规划 字符串
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1068 题目概括 (其实是复制的) 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中 ...
- BZOJ1068 [SCOI2007]压缩 【区间dp】
题目 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位 ...
- BZOJ 1068: [SCOI2007]压缩
Sol 区间DP.这个区间DP需要三维, \(f[i][j][k]\) 表示\([i,j]\) 这个区间中是否存在 \(M\) . 转移有两种,一种是这个区间存在 \(M\) ,那么直接枚举 \(M\ ...
随机推荐
- Google Chrome(谷歌浏览器)安装使用
谷歌浏览器官网https://www.google.cn/chrome/ Chrome是由Google开发的一款简单便捷的网页浏览工具.谷歌浏览器(Google Chrome)可以提帮助你快速.安全的 ...
- 乐维监控与Zabbix对比分析(一)——架构、性能
近年来,Zabbix凭借其近乎无所不能的监控及优越的性能一路高歌猛进,在开源监控领域独占鳌头:而作为后起的新锐监控平台--乐维监控,则不断吸收Zabbix,Prometheus等优秀开源平台的优点,兼 ...
- 云原生架构(二)环境搭建(Mac上安装Docker+Kubernetes+Istio一条龙)
一.背景 Istio 项目由 Google 和 IBM 的团队与 Lyft 的 Envoy 团队合作启动.它已经完全在 GitHub 上公开开发.目前已经是"Service Mesh服务网格 ...
- 修改数据时,一直提示"具有 XXX 的 字典管理 已存在(即数据已存在)
原代码: class DictConfig(models.Model): """ 字典表 """ id = models.AutoField ...
- vue移动端封装底部导航
<template> <div class="myfooter flex-betweenCenter"> <router-link tag=" ...
- AcWing1137. 选择最佳线路
题目传送门 题目大意 \(\qquad\)有一张有向图,可以有若干个起点,只有一个终点,求所有起点到终点的最短路中最短的一条,若所有起点都与终点不连通,则输出\(-1\) 解题思路 \(\qquad\ ...
- [编程基础] Python谷歌翻译库googletrans总结
1 使用说明 本文介绍python谷歌翻译库接口googletrans的使用.具体见官方文档: https://py-googletrans.readthedocs.io/en/latest/#goo ...
- 为什么网络I/O会被阻塞?
摘要:I/O 其实就是 input 和 output 的缩写,即输入/输出. 本文分享自华为云社区<为啥网络IO会被阻塞呢>,作者: 龙哥手记. 我们应该都知道 socket(套接字),你 ...
- BBS项目 未完待续
项目开发基本流程 1.需求分析 2.架构设计 3.分组开发 4.提交测试 5.交付上线 创建项目配置 环境配置 TEMPLATES = [ { 'BACKEND': 'django.template. ...
- LibreOJ 144. DFS 序 1
题面 给一棵有根树,这棵树由编号为 \(1\dots N\) 的 \(N\) 个结点组成.根结点的编号为 \(R\).每个结点都有一个权值,结点 \(i\) 的权值为 \(v_i\). 接下来有 \( ...