CodeforcesDP1
CodeforcesDP1
CF833B The Bakery(2200)
Problem
将一个长度为
Solution
记
- 单独成段,
。 - 加入上一段:(记
表示上一个值为 的位置) : 。 : 。
用数据结构维护,实现区间加,单点赋值,区间查询。
时间复杂度
CF1527E Partition Game(2500)
Problem
给定一个长度为
其中
现在你要把原序列划分成
Solution
CF1088E Ehab and a component choosing problem(2400)
Problem
给定一棵
Solution
首先有这样一件贪心考虑的事情:
时一定能取到比值最大值 。当 时,取得 的各连通块点权和均为 。
这很显然:取平均值一定不优于取最大值。所以可以先 dp 一遍得到连通块点权和的最大值,即
接下来解决要求分母最大,即找出尽可能多的不交的点权和为
又是贪心!类似树形 dp 得到包含当前子树根节点的连通块点权和最大值
贪心正确性说明:考察把取得点权和最大值的连通块
进行拆分。拆分后的若干连通块有两个归宿:
- 归到祖先上,连通块数增量最多为
。 - 归到后代上——如果可以归到后代,则在之前的递归中已经进行了该过程!
因此只用考虑第一种情况,那么拆分一定不优于直接贡献。
实现是容易的。
CF115E Linear Kingdom Races(2400)
洛谷:CF115E Linear Kingdom Races
Codeforces:CF115E Linear Kingdom Races
Problem
此题非常经典。
记
其中
我们会很自然的想到一个问题:如果比赛相交怎么办?
事实上,我们应该 关心整体,由于要枚举
然后维护
CF906C Party(2400)
Problem
有
问至少操作几次使得所有人都相互认识,并给出任意合法且次数最少的操作方案。保证操作方案存在。
Solution
可以想到这个过程是一堆孤立的点集不断融合,最后形成一个完全图。
然而同时对多个连通块进行合并是不好设计 DP 状态和转移的。于是我们换一个思路:考察某个特定的 连通块点集至少需要几次才能出现,我们用
然而本质问题还是没有解决:多个连通块的合并或者说扩张是独立进行的,这并不好 DP。
对于连续两个操作的点
,它们的先后操作顺序没有影响。
如果
如果
对于多个连续操作点的情况可以类似分析。结论是——选定操作的点集,则结果与操作顺序无关。
也许还是很抽象,但是如果我把这个过程用另一个老朋友来介绍,那么前后文的所有内容都变得明朗起来:并查集。
回到我们的主线任务:求得到一个完全图点集
于是我们有了一个大致的算法流程:对于状态
还要记录具体方案?不难的,类似
下面是一些实现细节:
- 初始时,自己是认识自己的。
- 需要初始化所有完全图点集
: 。 - 记
表示 初始认识的点集。需要初始化所有非完全图点集 : 。
牢骚:此题完全配得上它的 *2400。我的理解不是非常深刻,远不如 CF 的官方题解。但是哪怕思考一下算法正确性的本质也是极好的——可是,那些几行潦潦写完状态和转移、贴了份代码就走人的题解,真的领悟到哪怕一点点此题的精华了吗?至少我将继续我的思考态度,并进一步加深......
CF264B Good Sequences(1500)
Codeforces:CF264B Good Sequences
Problem
输入
如果一个序列
,有 ; ,有 ; ,有 。
问序列最长是多少。
Solution
普通的 DP 不可取,要优化 DP 状态。
记
CF633F The Chocolate Spree(2600)
Codeforces:CF633F The Chocolate Spree
Problem
给出一棵树,每个节点有一个权值,求出不相交的两条链的最大权值和。
Solution
纯粹而硬核的树形 DP,如何设计好状态和不重不漏的转移是关键。
为了方便 DP 转移,考虑在一些情况下进行 拆链 计算贡献。
记
记
记
记
记
有以下转移:
要一次性把所有情况考虑完全还是有难度的。
CF809D Hitchhiking in the Baltic States(2900)
洛谷:CF809D Hitchhiking in the Baltic States
Codeforces:CF809D Hitchhiking in the Baltic States
Problem
给出
Solution
设
交换状态,设
- 设
表示使得 的最大值,则 。由于 ,所以 该更新一定可以被执行,即可以直接令 。 - 设
表示使得 的最大值,则 , 。由于 (严格上升),所以 该更新一定可以被执行,即可以直接令 。
去掉
考虑用平衡树维护
tips:
- 理论上 DP 值是互不相同的。但由于整体加一的存在,平衡树中可能出现相同的 DP 值,注意实现时不要将它们都删掉。
CF590D Top Secret Task(2300)
Codeforces:CF590D Top Secret Task
Problem
有
Solution
考虑已知前
这样就方便我们设计 DP 状态了。
记
- 当前元素不作为关键点:
。 - 当前元素作为关键点:
。
时间复杂度
CF868E Policeman and a Tree
Problem
一棵 Terrorists win
,否则输出时间。
Solution
CF889E Mod Mod Mod
CF1032E The Unbearable Lightness of Weights
CF1798E Multitest Generator(2300)
洛谷:CF1798E Multitest Generator
Codeforces:CF1798E Multitest Generator
Problem
称一个长度为
称一个长度为
给定长度为
Solution
由样例可以发现,修改次数不超过
首先考虑如何判断不用操作就成为 multiset:记
则有转移:
当
然后考虑使用一次操作成为 multiset。如果
于是我们的关注点在于进行一次操作可以得到 test 数量为多少的划分。记
但这并不是所有的情况,还可以保留
但无论是在哪个位置的修改,划分出来的 test 数量始终是一段前缀。
所以可以记
当
其它情况均为
CF1798F Gifts from Grandfather Ahmed(2500)
洛谷:CF1798F Gifts from Grandfather Ahmed
Codeforces:CF1798F Gifts from Grandfather Ahmed
Problem
你有
你需要再准备一个盒子(里面的礼物数量由你自己决定),使得存在一种划分盒子的方案,让第
若无解,输出 -1
。
若有解,第一行输出一个数
Solution
EGZ 定理:一定存在一种方案使得从
个数中选 个数并且这 个数的和为 的倍数。
由此给出一种构造方案:将班级随
于是从前往后确定每个班级的答案集合,这个过程可以使用 DP。假设当前需要确定第
最后对于第
总时间复杂度为
CF1055E Segments on the Line(2500)
CF1399F Yet Another Segments Subset
CF1775F Laboratory on Pluto
CF1566F Points Movement(2600)
CF1801F Another n-dimensional chocolate bar(2700)
Problem
给定两个正整数
Solution
CF1804E Routing(2400)
Problem
给定一个
你需要构造一个序列
- 对于任意
,无向边 存在; - 对于任意
,初始时 为 ,然后不断让 变为 ,存在某个 ,使得 是其一个邻居。
或报告无解。
Solution
CF1830D Mex Tree
CF1840F Railguns
CF721E Road to Home
CF1859E Maximum Monogonosity(2500)
Problem
有两个长度为
区间
区间
给定
Solution
记
以上做到
注意到一个性质,转移中
那么现在要做的事情就是拆绝对值了。由于我们需求的是最大值,而
维护
CF815C Karen and Supermarket(2400)
Problem
在回家的路上,凯伦决定到超市停下来买一些杂货。 她需要买很多东西,但因为她是学生,所以她的预算仍然很有限。
事实上,她最多只能花费
超市出售
最近,超市一直在努力促销。凯伦作为一个忠实的客户,收到了
如果 Karen 购买第
然而,对于优惠券有一个规则。对于所有
凯伦想知道。她能在不超过预算的情况下购买的最大商品数量是多少?
Solution
显然树形 DP,但没想到这么简单。
记
初始化
喜闻乐见的时间复杂度
空间复杂度同上,注意要仔细算一下,容易爆。
CF797F Mice and Holes(2600)
Problem
Solution
首先记得判无解。
老鼠和洞的对应关系是件很麻烦的事情,这使得 DP 状态不好设计,既然如此,那就尝试找到贪心策略,发现一个洞对应一段区间内的老鼠,这样就可以 DP 了(类似 Cats Transport 那道题)。
记
直接转移是
一脸可以拆绝对值的样子,但其实没必要,我们可以 先想一下是否能预处理一个不方便当场快速计算的东西。
那么这个和式确实是能
发现
还得滚动数组,否则会 MLE。
本文作者:Schucking-Sattin
本文链接:https://www.cnblogs.com/Schucking-Sattin/p/17860609.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步