DP 总结想写啥写啥。
妈的,模拟赛就我不会 dp,举报了。
插入式 dp / 适用于排列的一类技巧
考虑钦定 这一个维度是比 这一个维度劣的,事实上这是增量式的 dp 方式。
- bamboo
删掉一个数会有 的代价。求删完 n 个数的方案数。
首先不要考虑 的代价,考虑 和 的相对顺序。事实上这就是先考虑 的傻狗位置,然后就让 挑一个位置,前面的那些傻狗数都挪位就好了,实质上是对若干状态的隐式的转移。
但这其实不仅仅是这个,还有一类称为“连续段”的 dp 技巧。
- P5999 [CEOI2016] kangaroo
考虑 表示前 个数分 个段。
考虑称这些满足题目条件的为一个 “段”。
显然是可以:
-
新开一段,注意首尾。
-
放在一段的首尾:但是这样左右符号必然不同所以是不行的。
-
连接两段。
注意对于首尾的限制,感觉不如摩天大楼。
- CF704B Ant Man
// 考虑插入 dp 加费用提前计算,即拆分贡献。
// 先分成四类贡献 :
/*
左边比 i 小:xi + ai
左边比 i 大:-xi + bi
右边比 i 小:xi + ci
右边比 i 大:-xi + di
*/
// 对于 s : 新建一段,右边比他大。插入一段,右边比他小。
// 对于 t : 新建一段,左边比他大。插入一段,左边比他小。
// 普通点 : 新开一段,左右都大,合并两端,左右都小,放左边,右边小左边大,放右边,左边小右边大
// 注意到这不是边上的点,所以肯定有贡献。
// 但其实可以 bi - xi, ai + xi 之类的。
整体 dp
大致是面对限制之类的用一维描述奇特的约束。通常需要线段树合并。
命运已经全忘了。
P4577 [FJOI2018] 领导集团问题
注意到子树内不同子树是没有区别的。然后我们考虑整体 dp.
的描述很简单,考虑如何转移。
前面那一个可以考虑线段树维护后缀最大值,但是需要区间加 tag.
可以做一下 yusland.
CF1455G Forbidden Value
考虑把 放在外边当根,然后我们可以直接整体 DP,记 为走出 的子树值为 的方案。
set 操作:
可以使用全局加,单点修改维护,注意顺序。
if 操作:
注意顺序,单点修改,全局加,线段树合并。
CF671D Roads in Yusland 测你妈,忘了怎么写??
动态 dp
总所周知,序列上的动态 dp 谁都会。
就是最大字段和那个题 :
GSS3 - Can you answer these queries III
直接 DP。
考虑 表示以 结尾的最大和, 为总的最大和。
注意这里其实是定义了个 max+ 卷积。
P6021 洪水。
写了个 LCT,考虑 dp.
然后拆掉虚实儿子。
考虑 min + 卷积。
构造矩阵答案是 的话,显然很难。
这个时候考虑构造 这个是很经典的 trick.
然后我们就有 :
这里讲一下动态 dp 的注意的点 :
- 全局的动态 dp 不用换根 lct
- 可以适当重载运算符
- 注意 lct 的 pushup 的中序遍历。
- access 的过程是加上变虚的儿子,减去变实的儿子。
LCT 常数好大 /kk.
CF1609E William The Oblivious
你妈唐题,注意写成向量转移的形式即可。
wqs 优化 dp
通常可以理解为答案函数是有凸性的,由于二阶导是恒为正或者负的.
所以我们可以尝试二分这个函数的导数,让导数作用在转移内,可以计算出坐标,知道了导数对应的坐标后可以继续二分。
拜谢 gaosichensb。
- P4383 [八省联考 2018] 林克卡特树
不会其他题,征途过于简单了 (bushi)。
割掉 条边,然后连上 条边,求树的直径的长度最大值。
显然就是割剩了 个连通块,然后直接拼起来,最后直接算就好了。
变成了选取树上 条不相交路径。考虑 wqs 二分,然后变成随便选若干条路径就好了。
考虑 dp,然后把 这个东西塞进 dp 答案里的 pair, 目前还比较自然。
然后分三类情况讨论,第一是自己还没有被接上,另一种是接上了一条,另一种是全接上了。
f[u][2] = max(f[u][2], max(f[u][2] + f[v][0], f[u][1] + f[v][1] + edge[i] + tmp));
f[u][1] = max(f[u][1], max(f[u][1] + f[v][0], f[u][0] + f[v][1] + edge[i]));
f[u][0] = max(f[u][0], f[u][0] + f[v][0]);
f[u][0] = max(f[u][0], max(f[u][1] + tmp, f[u][2]));
只可意会不可言传。
决策单调性
咕一下。
杂题。
CF55D Beautiful numbers
P6754 [BalticOI 2013 Day1] Palindrome-Free Numbers
CF449D Jzzhu and Numbers
P4127 [AHOI2009]同类分布
CF628D Magic Numbers
CF1612F Armor and Weapons
CF464D World of Darkraft - 2
CF1144G Two Merged Sequences
CF441E Valera and Number
CF704B Ant Man
2023.7.11 的听课笔记
[CEOI 2009] Photo
: 保留 相同的时候, 最大的值。
然后可以考虑建出笛卡尔树。
设 表示覆盖了 中高度 的最小个数。
显然有
合并两个区间,或者在 间放一个尽量大的矩形。
目标状态 。
path
差不多想出来了?
tricky
: 考虑这个能够走到的是一个矩形,所以我们还是别用折线表示了 ()
这个我们可以考虑二维部分和计算,尺寸小的先计算,大概是比较有前途的。
可惜不能直接把 ppt 蹦下来,无语住了。
P2943
我超,原!首先颜色数 。
怎么证明操作不相交?这个其实是显然的,必然有一端会变小,所以说必然是首位相接的几段,然后单调维护最大的一些位置即可。
CF856D Masha and Cactus
考虑直接在 上选链。
然后就是直接加上末端的那些没被覆盖的和其他子树求 max。
我们考虑子树求和,然后可以直接乱算即可,好典。
然后树剖维护即可。
ftiasch 's Contest #4 Data Structure You 've Never Heard Of : 求不降转化为或运算,然后可以考虑做高维前缀和,很神仙。
[POI 2014] tourism : 真难吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!