自主练习
方块消除
闲话
听说是本年大湾区的题目,本人无缘参加...
非常抽象的题目,听说考场很多人都是用伪解过的,也硬控了我好几天 (看题解都很难看懂) 。
是一道值得一做的区间 dp题,且有思维难度。
注:本篇题解的思路和部分话语来自同学_Cheems。
Solution
一眼题目就可以看出是区间 dp了,很快可以想到定义
转移就是枚举区间颜色
显然,这是可以被推翻的,举个栗子:
颜色:1 2 1 2 1
数量:4 6 1 6 4
若按照原来的方法为
而最优解其实是先消中间的
这说明我们并不需要把同一个颜色
那么我们再考虑
那么根据定义,可知
接下来分类讨论
1.
只单独选 区域,那么直接和 合并,即 。 2.
选择 区域和区间 内其他颜色为 的区域,很简单,枚举 中的 ,再枚举 ,那么 。
设
测试题目
T1 [NOI Online #3 提高组] 水壶
Solution
非常简单,小贪心,用完
T2 Task
闲话
考场上,我 pass 掉了贪心,用了一个小时调线段树维护最大值,还错了...
通过数据范围分析题目是一个很好的技巧。
Solution
贪心题,首先观察贡献值
由于
对于每一任务,尝试枚举
若
T3 CF1606E Arena
Solution
这是一道动态规划题和排列组合相结合的题目。
先定义
1.若
,即此回合后所有的人都会死亡时,发现正着想很难,正难反则易,可以先求出总方案数,再减去不符合情况的数量。人的血量范围在 ,有 个人,则总数为 ,那反面则是没有人的血量达到 ,方案数是 ,总的来说对答案的贡献是 ; 2.若
,即此回合后还会有人存活,枚举此轮过后还会有 个人存活,从这 个人中选择 个人存活为 ,这 个存活人的最大血量只可能是 ,那么其方案数已知,是 ;最后还需考虑死亡的 个人,因为他们会死亡,所以他们的血量必须小于 ,方案数是 。整理以上,可以得出此情况的转移方程为 。
最后枚举
T4 「C.E.L.U-01」族谱树
闲话
- 做法很多,思维发散性很好的一道题。
Solution
- F1:可以先找到该深度在树上的最左最右节点,再对其求 LCA。
证明(多为感性理解):
首先根据中序遍历得出序列,假设最左右节点在序列的位置分别为
接下来,我们需要证明最左右节点的 LCA 一定是所有该深度的节点的 LCA,假设最左右节点的 LCA 是
- F2:类似于 Tarjan 求树上的 LCA,可以运用并查集和 dfs 解决此问题。
我们只需要在回溯的时候合并节点,并记录当前深度的答案
T5 集合位置
Solution
经典的题目,求无向图的次短路,且不能重复经过同一条路,我们可以先求出最短路,并记录最短路的个数
否则,很容易可以想到在最短路上删一条边,再重新跑最短路,打擂台比较删哪条边的答案更小即可。
难点在于如何删边,如果暴力删边固然不可行,那么可以尝试将要删去的边的两个端点打上标记,在跑最短路时跳过标记。