DP
明明 DP 就差确很晚才总结。
树形 DP
DYN-Dynamite
最小点覆盖问题。但是我太菜只会距离为 2 以内的,此类还可以改动态 DP,不做赘述。
说这个题,显然二分,然后树形 DP。考虑一些类似贪心的思想。如果以一个子树的根节点为根,到所有子树中的关键节点最远的距离小于等于当前的
我们考虑把刚才那个步骤优化,一个子树,当根节点到子孙中最远关键节点,正好等于
总结一下交了好几遍都没过的原因。我只用了一个数组来记录信息。用正负来区分是能继续覆盖还是需要覆盖。但是当 dp 值是 0 的时候不知道这个节点本身有没有被覆盖。所以还得加个布尔判断一下是哪种状态。
无可奈何花落去
本以为是期望 DP,但是想了半天发现期望不好累积起来维护,原来是树上背包。
我忘掉了一个很重要的结论,link。
但是要注意写法的正确性,DP 中 siz 加一个子树更新一次,不然就假了。
至于这题 DP 本身就很简单了,设一个三维状态
【MX-S1-T3】电动力学
好题。借这个题复习一下圆方树,把每个点双里的点通过一个方点相连,然后形成一个最多
具体建树方法:tarjan 的时候,对于一个节点
DP 好难。好难。不会。
状态设计很巧妙,乘法原理,很深刻。
贴一下 xieziheng 的 题解,写得好。
期望 DP
Revenge of The Salary
打 ABC 时的题,倒不是有多难。我没写过也不会这种期望之类的 DP。用这道题学一下。这种题的套路大致都是求每个数字对答案产生的贡献。
这个题也许还是比较简单了。设每个数被选到的概率是
聪聪与可可
简单题。一开始没想明白怎么更新状态,差点想写记忆搜,但是发现方向有问题。其实就是根据距离 DP 就行了。
我们发现每次经过两人每操作一回合两人距离都会更进一步。所以直接从小到大枚举两点间的距离 DP 就行了,DP 复杂度
区间 DP
Greedy Pie Eaters P
DP 状态的设计是好巧妙。设奶牛吃掉
感觉这种题最巧妙的还是状态设计的时候的限制条件,很好地使这个问题能够 DP 起来了。
Outer space invaders
首先时间和距离都可以离散到
我好蠢啊啊啊。
还是巧妙在设计状态的限制上。
设
然后还需要一些贪心的东西,这题太妙了。。
我们考虑左右端点都在
状压 DP
我本来以为状压都是一些很板子的弱智题。
愤怒的小鸟
想了一段时间,只会
由于三点确定一个抛物线,已给原点,所以
但是有一个很聪明的点。其实我之前考虑过,但是这题忘了。
算是状压转移的时候的一个 trick 吧。你可以只考虑和其中某一位
Minimum Sum of Maximums
呃呃。我竟然不会枚举子集的 trick。可能几年前刚学的时候遇到过吧,反正现在忘了。
简单记一下。
for(int j=i;j;j=i&(j-1))
这个枚举保证枚举出来的
你单次枚举一个集合的子集肯定是
然后是这个题。状压 DP 套区间 DP。
其实好像也不是特别难。
分析性质,每一段的贡献最优可以做到
wqs 二分
放到 DP 这里吧。一般来说严格证明一个 dp 问题是凸的都是用费用流建模的方法。但是实际上好像有很多问题都是凸的,可以猜(或打表)。
凸函数大概就是随着选择的数的增加,每增加一个选的数,带来的效果会越来越小。
wqs 二分一般用于一些限制选的个数的 dp,不限制个数的时候很好做,但是限制后是一个凸函数的问题。
阿粲给了我一个理解二分斜率的角度,就是说二分一个代价,然后随着选的数的个数的增长,这个代价会形成一个一次函数,此时的 dp 值就是原来的凸函数减去一个一次函数,只有与这个代价也就是斜率相切的点的函数值最大。
然后需要区分两种情况,一种是限制选
很多费用流模型还可以用反悔贪心来做,也可以看做是模拟求增广路。