区间dp
P1880 [NOI1995] 石子合并(破环成链+石子合并类套路)
题目
在一个圆形操场的四周摆放
试设计出一个算法,计算出将
题解
环形的序列,那么断开环,倍长序列去做
设
时间复杂度为
HDU 4283 You Are the One (栈的性质+石子合并类套路)
题目
有一个长为
题解
考虑栈的性质,第
时间复杂度
P1005 [NOIP2007 提高组] 矩阵取数游戏 (取两端套路)
题解
首先一轮一轮的考虑是困难的,所以我们一行一行的考虑
这样原问题可以转化对每一行确定选数的顺序
那么就可以通过区间dp转移了,假设要选完
时间复杂度
P3205 [HNOI2010]合唱队 (取两端套路+增加维数)
题解
考虑对理想队形进行区间dp,假设此时考虑排成区间
原因是我们dp的状态中缺少上一次的值放在了那里这一个信息,所以将状态修改为
转移如下
if(a[i]<a[i+1])f[i][j][0]+=f[i+1][j][0];
if(a[i]<a[j])f[i][j][0]+=f[i+1][j][1];
if(a[j]>a[i])f[i][j][1]+=f[i][j-1][0];
if(a[j]>a[j-1])f[i][j][1]+=f[i][j-1][1];
初始状态注意把所有的数都当成从左边进来的,不然会算重,时间复杂度
P1220 关路灯 (提前计算贡献)
题解
首先考虑如果经过一个灯而不关掉它显然是不优的,所以每次关掉的灯一定是一段连续的区间
于是设
那么就有转移
f[l][r][0]=min(f[l+1][r][0]+(p[l+1]-p[l])*(pre[l]+pre[n]-pre[r]),f[l+1][r][1]+(p[r]-p[l])*(pre[l]+pre[n]-pre[r]));
f[l][r][1]=min(f[l][r-1][1]+(p[r]-p[r-1])*(pre[l-1]+pre[n]-pre[r-1]),f[l][r-1][0]+(p[r]-p[l])*(pre[l-1]+pre[n]-pre[r-1]));
其实这本质是个贪心,
时间复杂度
P4170 [CQOI2007]涂色 (涂色类套路)
题目
给定一个长度为
我们现在要在上面涂色,每次涂色必须涂连续的一段区间且可以覆盖之前涂过的颜色
问使初始木板变成目标颜色的最小操作次数
题解
设
那么考虑分类讨论
-
若
,则有 -
若
,那么我们直接在端点处染色即可 -
若
,那么我们就枚举一个分界点,左右两边涂不同的颜色
状态转移如下
if(l==r) f[l][r]=1
else if(s[l]==s[r]) f[l][r]=min(f[l+1][r],f[l][r-1]);
else if(s[l]!=s[r]) for(int k=l;k<r;k++) f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]);
时间复杂度
HDU 2476 String painter (分步涂色)
题目
给定两个初始串
题解
首先一个朴素的思路是直接设
但是你要分十万种情况讨论,理论可行,但不可做
所以我们考虑这样一个过程,我们可以先计算从无色串到
考虑如何对
- 如果
,那么 无需染色 - 如果
,那么我们枚举染色的分界点 ,转移方程为
时间复杂度
P7914 [CSP-S 2021] 括号序列(通过增维实现对不同情况的分类讨论)
题解
首先,朴素的思路是设
设
表示全是 的情况 表示 的情况 表示 的情况 表示 的情况,注意该状态包含 的状态 表示 的情况 表示 的情况,注意该状态包含 的状态
下面我们来考虑转移,思路就是在已有的
时,对 进行一个特判即可 时,如果当前区间 的左右端点不匹配则为 ,否则注意一下转移时不能有 的情况,于是转移为
时,我们就是要拿 拼上 ,这里不拿 拼 是为了满足长度不超过 的方案数,于是转移如下
时,我们可以通过 拼上 或者 拼上 ,注意加上 的情况
时,我们就是要找开头为 的即 的后面拼接
时,我们就是要找开头为 的即 的后面拼接 ,另外别忘了还有
答案必须为首尾都是括号序列.所以就为
这样dp的时间复杂度为
posted on 2023-07-24 19:55 star_road_xyz 阅读(18) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】