 浅谈
浅谈
 - 由于窝太菜了,只好写这篇浅谈来聊以***。
那么我们从最简单的入门开始吧
【一】基础
 %5C%20%5C%20lis&preview=true) 一个最基础的
一个最基础的 入门题。
入门题。
 - 状态: - 表示到 - 的 - 长度 
- 转移: 
- 答案统计: 
- 因为我们在更新 - 时要找到最大的 - 来更新答案使得答案最优。这样的复杂度是 
- 但是我们可以在 - 的时间内完成,此时可以用树状数组来维护。这里来讲一下用树状数组来维护。此时只要利用简单的区间求最值以及区间加就能完成。 
- 随便再来几道线性 - : 
&preview=true) 例题一:CF711C
 例题一:CF711C
 - 这算是一道比较简单的 - 题 - 表示表示前i颗树已经分成k组,第i颗树的颜色是j的情况花费的最小费用。 - 转移也很简单(就是思考这个状态可以由哪些状态转移过来就行了) - 当 - 确定的时候: - 当 - 不确定的时候: - 这种题目只要把所有转移考虑全面就很简单了。 
&preview=true) 例题二:CF706C
 例题二:CF706C
 &preview=true) 例题三:CF404D
 例题三:CF404D
 【二】 的优化
的优化
 - 由于蒟蒻比较菜不知道什么神仙优化方法,就写几种基础的就好了。
&preview=true) 单调队列优化
 单调队列优化
 - 其实单调队列就是一种队列内的元素有单调性(单调递增或者单调递减)的队列,答案(也就是最优解)就存在队首,而队尾则是最后进队的元素。因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的。(引 出处) 
- 我们一边看例题一边来理解他的妙处所在。 
例题一:P6040
- 对于暴力: - 设 - 表示到 - 的最小花费精力,转移 - 即可 - 转移也很简单,没什么可以讲的: 
- 现在我们就要使用单调队列来优化 - 对于上述柿子我们可以进行移项合并得到: - 到这里我们想到用单调队列去维护 - 单减即可。 - 对于每次距离的限制用对头来控制,如果 - 那么要更新队头(可以认为队头是来控制区间范围的),对于 - 值的更新要用到队尾,即当 - 时要更新队尾来保证队内元素单调递减。这样我们就很好地维护了一个单调队列。 
&preview=true) 例题二:P2569
 例题二:P2569
 &preview=true) 我写的题解(可参考)
我写的题解(可参考)
 &preview=true) 例题三:CF372C
 例题三:CF372C
 &preview=true) 线段树优化
 线段树优化
 - 注:由于窝比较菜,只会一些很套路的,巨佬请让步。 
- 以下是我的个人观点:因为线段树可以维护一些区间加,区间 - 。。而 - 不是有时也是寻找从哪里转移过来时候,为了最优,可以使用线段树。或者只是对 - 方程式中的一部分进行快速查询与记录。一般可以把 - 变成 - 。 话不多说,还是来看几道例题。 
例题一:CF629D
- 对于暴力 - 暴力 - 很简单设 - 表示到第 - 块蛋糕最大体积 - 转移也很显然: 
- 我们考虑用线段树优化,不是很明显就是用线段树去找到最大的 - 来转移,那么不是只要维护一个区间最大以及区间修改就行了。每次更新完 - ,把 - 用 - 来更新。我是用树状数组的,常数稍微小一点。 
例题二:CF115E
- 这道题目相对上面那题难一点。 
- 对于暴力 - 表示只考虑修前 - 条路的最大收益,转移非常显然: - ,其中 - 表示这个区间的收益, - 表示这个区间的修理费。 
- 我们还是来考虑线段树优化。首先要保证无后效性,我们按右端点排序,然后从 - 到 - 修路,每个点的左边区间减去修理费,遇到比赛的右端点,在左区间加上收益,反复更新即可。这些区间更新修改操作都可以用线段树实现。 
&preview=true) 例题三:CF833B
 例题三:CF833B
 &preview=true) 例题四:CF1304F2(虽然本人就做了F1)
 例题四:CF1304F2(虽然本人就做了F1)
 &preview=true) 长链剖分优化
长链剖分优化
 - 由于没有怎么学习这里先咕咕咕。。
【三】进阶
 - 再次申明:由于博主比较菜只会写众所周知的进阶
&preview=true) 状压
状压
 - 一下是我的个人看法:状压 - 就是对于 - 但爆搜又无法完成时使用的 - (是不是非常有道理)。认真些,其实状压- 就是把某些状态用二进制来存( - 表示出现过, - 则相反)。 
- 但是在学习状压 - 之前先要比较熟悉位运算状压之位运算 
- 我们还是拿几道题目来看看吧。 
例题一:CF115E
- 对于暴力很简单,不再赘述。 
- 我们首先要知道 - 为什么是 - 呢。我们可以得到 - 只会在 - 以内,所以会出现的数字只有 - 和 - 以内的质数。而对于 - 来说,完全可以用 - 代替,所以现在会出现的数字被缩减为 - 个了。应该讲得比较清楚。这样我们对于每个质数进行二进制表示来实现状压。 - 于是我们设 - 表示与 - 匹配到 - 时的质数集状态为 - 的 - 的最小值。再用 - 来记录路径,这样就随意转移即可。 - 大概为 - ,其中 - 为 - 的质数枚举, - 为对每个质数存下的状态。 - 随 - 的更新一起更新即可。输出方案时候我们只要不停回溯最终状态即可,即 - 。 
例题二:CF1316E
- 一道刚刚的 - 的比赛题,挺好的。 
- 有数据范围 - 可得此题为状压 - 。 - 我们首先建个结构体,然后对观众的收益进行排序,再做 - 。 - 我们设 - 表示到第 - 个人时候, - 个位置的状态为 - 时候的最大收益。 - 转移比较容易 - 若不能再选观众了: - 还能选: 
&preview=true) 例题三:CF8C(要加个奇妙的剪枝)
 例题三:CF8C(要加个奇妙的剪枝)
 &preview=true) 例题四:CF580D(比较简单)
 例题四:CF580D(比较简单)
 &preview=true) 树形
 树形
 - 树形顾名思义就是在一棵树上面做 ,是不是很简单啊。他有着和普通 一样的分类(比如背包)。转移相对线性比较难理解,所以还是需要好好理解一下的。那么我们先来看几道题目吧。 
&preview=true) 树上背包
树上背包
 - 树上背包就是把背包做到树上就好了,与线性套路相似。 
例题一:P2014 [CTSC1997]选课
- 这是一道非常经典的题目,首先我们设 - 表示选择以 - 为根的子树中 - 个节点的最大收益。 
- 然后就是分组背包的转移了: 
- 答案 - (这边我把根变成 - 而不是题目里的 - ) 
例题二:P2515 [HAOI2010]软件安装
- 这道题目是一道综合应用题,需要用到 - 缩点。 
- 我们先按照某些依赖关系去连边,然后把相互依赖的一些软件进行缩点。缩完点后,再建一遍图。(以上是 - 部分)由于建立出来的是一棵树,我们建立一个虚拟点 - 以虚拟节点作为根。那么我们就可以在上面进行 - 啦,下面就与例题一同理了。 
- 状态:设 - 为以 - 号点为根的子树中用不超过 - 的空间的最大价值。 
- 转移: 
- 答案就是: 
&preview=true) 一般树形
 一般树形
 - 做了几道这样的题目发现其实从转移到 其实就是 之间的转移变化,如果无法理解这句话,我们开看一道题目。 
例题一:P2986 Great Cow Gathering G
- 这是一道必做题,初学的都要做 
- 我们设 - 表示以 - 为牛棚的花费,只要有 - 转移过来即可。对于转移画几个图 - 随便想想就可以得到。
- 转移: 
 应该比较好理解,就是父亲向儿子走了一步,那么父亲与儿子的连边产生的贡献即- 。还是很显然的。 
-  准备填坑 

 京公网安备 11010502036488号
京公网安备 11010502036488号