AcWing 322. 消木块
由于木块可以由一些木块的消除,使两边相同颜色的合并
所以我们设定一个归并方式,即每个区间记录一下右边的延展性。
(等于左边找右边)
设 \(f[i][j][k]\) 为\([i, j]\) 区间,右侧有 \(k\) 个颜色 \(= a[j]\) 的。
考虑两种转移方式。
第一种操作:直接搞掉右边的。
设 \(i <= p <= j\),且 \([p, j]\) 区间内的颜色都是 \(a[j]\)。
那么把右边的搞掉即可,
\(f[i][p - 1][0] + (k + j - p + 1) ^ 2\)
第二种操作:考虑把 \([q + 1, p - 1]\) 这段搞掉,然后左边和右边的合并。
即找一个位置 \(i <= q < p - 1\); 且满足 \(a[q] = a[j]\)
\(f[q + 1][p - 1][0] + f[i][q][k + j - p + 1]\)
一个剪枝,保证 \(a[q] \not= a[q + 1]\),否则肯定不优。
值得注意的是边界问题
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int N = 205;
int n, a[N], f[N][N][N];
int dp(int l, int r, int k) {
if (f[l][r][k] != -1) return f[l][r][k];
int &v = f[l][r][k];
if (l == r) return v = (k + 1) * (k + 1);
int p = r;
while (p - 1 >= l && a[p - 1] == a[r]) p--;
v = (p == l ? 0 : dp(l, p - 1, 0)) + (k + r - p + 1) * (k + r - p + 1);
for (int q = l; q < p - 1; q++) {
if (a[q] == a[r] && a[q] != a[q + 1])
v = max(v, dp(q + 1, p - 1, 0) + dp(l, q, k + r - p + 1));
}
return v;
}
int main() {
int T; scanf("%d", &T);
for (int t = 1; t <= T; t++) {
memset(f, -1, sizeof f);
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", a + i);
printf("Case %d: %d\n", t, dp(1, n, 0));
}
return 0;
}
AcWing 322. 消木块的更多相关文章
- AcWing 227. 小部件厂 (高斯消元)打卡
题目:https://www.acwing.com/problem/content/description/229/ 题意:有很多个零件,每个零件的生产时间都在3-9天之间,现在只知道每个工人的生产部 ...
- AcWing 209. 装备购买 (高斯消元线性空间)打卡
脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量z[i]=(ai,1,ai,2,..,ai,m)z[i]=(ai,1,ai,2,..,ai,m) 表示,每个装备需要 ...
- AcWing 208. 开关问题 (高斯消元+状压)打卡
有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变为关,如果为关就变为开. 你的目 ...
- AcWing 207. 球形空间产生器 (高斯消元)打卡
有一个球形空间产生器能够在n维空间中产生一个坚硬的球体. 现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. ...
- Acwing 883高斯消元法的运用
Acwing 883高斯消元法的运用 解线性方程组 Acwing 883 输入一个包含 n 个方程 n 个未知数的线性方程组. 方程组中的系数为实数. 求解这个方程组. 下图为一个包含 m 个方程 n ...
- 快消品迎来B2B元年,行业将如何变革?
一年接近尾声,又到了年终总结的时候,宴会厅里传来各种激情澎湃的演讲,有的行业遍地开花.欢声笑语不绝于耳:有的行业却没能迎来"昨夜东风",只能嗟叹"不堪回首".2 ...
- PIC10F200/202/204/206/220/222/320/322芯片解密程序复制多少钱?
PIC10F200/202/204/206/220/222/320/322芯片解密程序复制多少钱? PIC10F单片机芯片解密型号: PIC10F200解密 | PIC10F202解密 | PIC10 ...
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
- 【BZOJ-3270】博物馆 高斯消元 + 概率期望
3270: 博物馆 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 292 Solved: 158[Submit][Status][Discuss] ...
随机推荐
- 不小心清空了Ceph的OSD的分区表如何恢复
前言 如果你是新手,应该出现过敲盘符的时候,敲错的情况,有些操作可能没什么问题,查询类的操作都没问题,但是写入的情况,就可能比较麻烦了,当然老手也可能有误操作,本篇将讲述在误操作把分区表给弄丢了的情况 ...
- mon的稳定性问题
MON的稳定性问题: mon的选举风暴影响客户端IO LevelDB的暴涨 频繁的客户端请求的DDOS mon选举风暴: monmap会因为mon之间或者mon与客户端之间网络的影响或者消息传递的异常 ...
- Java从后端下载文件到浏览器
// 注: // 获取项目下文件或者文件流 // File file = new File(this.getClass().getResource("/xls/adminImportUser ...
- 深入理解r2dbc-mysql
目录 简介 r2dbc-mysql的maven依赖 创建connectionFactory 使用MySqlConnectionFactory创建connection 执行statement 执行事务 ...
- Golang 实现 Redis(6): 实现 pipeline 模式的 redis 客户端
本文是使用 golang 实现 redis 系列的第六篇, 将介绍如何实现一个 Pipeline 模式的 Redis 客户端. 本文的完整代码在Github:Godis/redis/client 通常 ...
- 面试老被问LinkedList源码?看看阿里技术官是怎么深度剖析的吧!
前言 LinkedList底层是基于双向链表,链表在内存中不是连续的,而是通过引用来关联所有的元素,所以链表的优点在于添加和删除元素比较快,因为只是移动指针,并且不需要判断是否需要扩容,缺点是查询和遍 ...
- CorelDRAW X7 X8 2017 2018是什么关系?
从CorelDRAW 2017版本开始我们叫习惯了的X几系列的CorelDRAW毅然决然的就换了称呼,所以有时候很多朋友对于软件版本,经常会傻傻分不清,还有人认为X8版本比2017版本高,究竟为什么会 ...
- Guitar Pro吉他指弹入门——双手泛音
曾经有一段时间在琴行里经常遇到有人来试琴,很多人试弹得曲子就是郑成河的<Flaming>,直译过来就是热情的意思.这首曲子里面有很多泛音存在,吉他泛音类似于钟鸣或者摇铃的声音,是一种令人耳 ...
- CSP2020 游记
Day -28 后天就初赛了,考了一套模拟题,自闭,心态爆炸,感觉退役不远了 Day -26(初赛) 香农是谁??? 手写随机nth_element与O(n)的哈希表??? 阅读程序T2时间复杂度分析 ...
- 【数据结构】关于前缀树(单词查找树,Trie)
前缀树的说明和用途 前缀树又叫单词查找树,Trie,是一类常用的数据结构,其特点是以空间换时间,在查找字符串时有极大的时间优势,其查找的时间复杂度与键的数量无关,在能找到时,最大的时间复杂度也仅为键的 ...