好题。

显然区间 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。

最新文章

  1. CSS3透明属性opacity
  2. ios 使用UINavagationController时,push,pop方法执行的一些方法
  3. JAVA--网络编程(UDP)
  4. 宽度的100%和auto的区别
  5. JS 浮点型数字运算(转)
  6. Qt之开机自启动及拥有管理员权限
  7. C 和 C++ 的速度相差多少,你知道吗?
  8. ZOJ 3795 Grouping(Tarjan收缩点+DAG)
  9. Asp.Net MVC以 JSON传值扩展方法
  10. Verilog HDL的程序结构及其描述
  11. 2017ccpc哈尔滨区域赛H
  12. php array_multisort函数实现按某一字段对二维数组进行排序
  13. COGS 2396 2397 [HZOI 2015]有标号的强连通图计数
  14. JAVA多线程之线程间的通信方式
  15. Go学习之旅
  16. 10:处理 json
  17. wpf treeview中的两个事件
  18. nancyfx 自定义路由module
  19. 获取IE (控件)的所有链接(包括Frameset, iframe)
  20. jquery中绑定click事件重复执行问题

热门文章

  1. 【SQL真题】SQL2:平均播放进度大于60%的视频类别
  2. 跳出foreach循环
  3. elasticsearch global 、 filters 和 cardinality 聚合
  4. python函数及算法
  5. java中加号的用法
  6. Typora + PicGo + B2 Cloud Storage 实现个人免费图床
  7. [OpenCV实战]26 基于OpenCV实现选择性搜索算法
  8. 数据结构与算法 -&gt; 并查集
  9. Linux基础操作-01
  10. 学习ASP.NET Core Blazor编程系列二十二——登录(1)