12.19 CW 模拟赛 T1. 烟花
思路
转化题意移步赛时记录
详细题解见 题解下载
好的那么主要问题仍然是怎样做才能扔掉后效性, 乍一看是不可能的, 但是我们可以慢慢的考虑
首先我们需要利用有效时间段 \(\leq 500\) 这个条件, 我们考虑建出每种选择的情况, 再按照树上的仇恨关系建出图
具体的, 对于每一种 \([j, j + t_i - 1], l_i \leq j \leq r_i - t_i + 1\) 我们都建出一个点, 然后向所有与他有仇恨关系且重合工作段的点连上一个边权为其花费的边 (花费为 \(0\) 边权就设为 \(0\))
这样子搞出来一个 \(G = \{V, E\}, \lvert V \rvert = \omega N\) 的图, 其中 \(\omega \approx 500\) , 特别的, 你发现在树上连出这个图, 图一定是一个 \(\rm{DAG}\)
有了 \(\rm{DAG}\) , \(\rm{dp}\) 是显然的, 不再赘述
回到我们一开始的问题, 这样做如何消除了后效性?
类似于暴力, 这个图考虑完全了所有情况, 每个点在考虑花费时, 点的选择已经确定了, 那么就一定可以得出最优的答案
其实我们还是可以用 \(\color{yellow}{暴力 \Rightarrow 正解}\) 的思路去想, 暴力的 \(20^{10}\) 种可能, 有一些其实是没有必要的, 即他在一些地方已经劣了
还有一个问题是, 我们不能真的开下 \(\omega N\) 大小的图, 必定爆炸, 和之前的很多题一样, 把图变成状态加一维即可, 常见的 \(\rm{trick}\)
很好的题, 不妨复习
- 定义操作 (约束) 和开销 / 收益, 要求最值化开销 / 收益
- 推式子计算约束条件
- 模拟操作情况, 找到最好开销, 注意最大和最小, 一般来说可以贪贪心 (将简单情况先处理, 然后在基础上处理最值)
- 考虑操作对答案的影响 (推式子) , 据此对操作进行处理
- 推导每个元素对答案的贡献
- 推导动态规划
- 判断是否存在操作满足约束
- 模拟, 对于重复情况去重
- 要求一个数列的多个部分 \((\)前缀, 子串 \(\cdots\)\()\) 的成本
- 贪心找到最优操作的构造方法, 加上优化 / 找共同点
题意
给定 个人对应的区间 和常数 , 要求一个序列 , 满足
给定一棵树, 其中有 条边
一个序列 的花费为 钦定
求最小花费序列
不难想到结合那棵树进行理解
不难发现如果对于点 \(u\) 和 \(t_u\) , 其子树中的最优解确定, 难道不可以求出 \(\textrm{fa}_u\) 子树中的最优解吗
再因为有效的区间 \([l_i, r_i]\) 大小不超过 \(500\) , 于是随便转移一下即可
实现
不打了
总结
善于转化问题到一个更好解决的地方上
\(\rm{trick}\) : 增维省图, 增图省维
树形结构 / \(\rm{DAG}\) 的重要性质就是在 \(\rm{dp}\) 时无后效性, 往往贴近这个性质进行考虑

浙公网安备 33010602011771号