DP提高专项1题解
主要讲一下每一题的做法以及思考方式。
感觉难度薇
题目描述
Jimmy 最近迷上了一款叫做方块消除的游戏。游戏规则如下:
例如,9 122233331
表示为
4
1 2 3 1
1 3 4 1
游戏时,你可以任选一个区域消去。设这个区域包含的方块数为
第一行包含一个整数
第二行包含
第三行包含
思路点拨
挺简单的一题。考虑到本题从序列中间开始操作会得到不同的结果,所以不可以使用类似于子序列提取的线性dp,而是考虑区间dp。
我们比较头疼的是,在消除完之后右边的方块会挪过来,所以我们可以在状态中体现这一点。我们定义
转移分两类讨论:
- 把右边炸了!
- 考虑炸掉中间一段,然后右边的
移到左边去(要求左边与右边颜色相同)
别的不需要多多考虑,因为我们最为简单的方式就是从左到右依次炸掉,我们不论怎么操作,答案不会劣于这个。所以我们只需要考虑让颜色相同的尽量在一起炸掉。
时间复杂度
代码很短,不放了。
题目描述
现在有
思路点拨
二叉排序树的性质:中序遍历是有序的。我们考虑对原序列排序之后区间
因为需要父子之间权值互质,所以我们在状态里记录一下根。设
时间复杂度
考虑优化,我们发现我们做了一个十分智障的操作。我们在状态里面记录根的目的就是为了保证根与根的父亲不互质,但是没有必要将根表示出来。因为对于区间
转移方式几乎不变,枚举一个根(
for(int len=2;len<=n;len++)
for(int l=1,r=len;r<=n;l++,r++)
for(int mid=l;mid<=r;mid++){
if(vis[mid][r+1]) f[l][r]|=(f[l][mid-1]&g[mid+1][r]);
if(vis[mid][l-1]) g[l][r]|=(f[l][mid-1]&g[mid+1][r]);
}
时间复杂度
题目描述
Dreamoon 有一个字符串
更形式地说,让我们用
思路点拨
本场比赛最有思维含量的一题,比较靠设状态。
看到题目,这题挺
转移可以刷表。对于
-
删了
-
不删,此时维护
的失配指针。
特别好想,时间
发现,上面这个
那么我们又可以得出如下状态:
时间复杂度
我们假设,
大概就是这样,优势在于决策点减少了。具体细节不讲。
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!