DP深度好题
DP专题
【UR #20】跳蚤电话
能半独立做出来的题不多了。
容易发现各个子树的先后顺序是不会互相影响的,显然是树上DP。
初始化 $ f_{u,0}=0,f_{u,1}=1,siz_u=0 $
设 $ f_{u,0/1} $ 表示以 \(u\) 为根的子树中,\(u\) 是否是第一个加入集合的点的方案数。对于 $ f_{u,1} $ 是简单的,有转移 :
而 $ f_{u,0} $ 形成的操作序列一定是前一段都是同一个子树,然后是节点 \(u\) ,后面顺序任意,可以得到暴力转移:
现在问题在于快速求解 $ \sum \dbinom{ siz_u -j }{ siz_v-j } $ 。
找九日得到一个优秀的式子:
证明是类似于杨辉三角的东西。
则上述DP可写为:
最后 $ f_{1,1} $ 即为所求。
【UR #17】滑稽树上滑稽果
一个显然的事实是让这棵树形成一条链结果一定不劣(特殊性质就是来消愁的)。
设 $ f_S $ 为当前AND值为S的最小可能的答案,转移 $ f_S = \min f_T + val $ 。
其中 $ S,T $ 满足 $ S \subset T , \exists a_i , a_i \cap T = S $ 。
发现这个很难做,考虑放松第二个限制,改为 $ \exists a_i , a_i \cap T \subseteq S $ ,惊奇地发现这样不会影响结果。可以用高维前缀和来维护(这部分不要写枚举子集,会卡常)。
复杂度 $ O(3^{\log V}) $
[agc022_f]Checkers
A绕着B对称,最后坐标为 $ 2 X_b - X_a $
答案一定是一个关于 $ X^i $ 的多项式,由于单位长度非常巨,所以方案数只与每一项前的系数有关。
不难发现它可以表示成一棵树的形式,其中节点 \(i\) 的系数绝对值为 $ 2^d $ ,\(d\) 是当前节点的深度,正负情况与兄弟节点的先后顺序和直接儿子的数量都有关。
我们对每一层分别考虑。在不考虑儿子节点的情况下,兄弟节点的正负号是交叉存在的,设其父亲节点为 \(u\) ,则有 $ \frac {siz_u}{2} $ 个节点与 \(u\) 正负性相同。加入儿子节点后,若当前节点的儿子节点数量为奇数,那么符号改变。
设计如下的DP状态: $ f_{i,j} $ 表示前 \(i\) 个节点已经确定,当前这一层有 \(j\) 个点有奇数个儿子。
已知 $ f_{i,j} $ ,考虑这样转移:枚举 \(k\) 表示下一层节点数,需要保证 $ k-j $ 是偶数(显);设 $ t=\frac{k-j}{2} $ ,枚举 \(p\) 表示下一层有多少节点与父亲符号相同,那么至少需要 $ |t-p| $ 个节点儿子个数为奇数才能合法。
我们惊奇地发现这竟然是对的。为什么一定是转移到 $ |t-p| $ 而不能是更多呢?可以注意到不这样做会有重复的情况,比如 $ v_1,v_2 $ 儿子个数都是奇数,那么我们把 $ v_1 $ 的儿子都连到 $ v_2 $ 上,树的形态不同但最终结果不变,是不是很深刻?
[agc036_d]Negative Cycle
这题竟然是差分约束。建立差分约束模型,考虑负环的含义。
容易发现必然有 $ x_i \ge x_{i+1} $ ,对 \(x\) 差分得到数组 \(q\) ,那么有 $ q_i \le 0 $ 。
假设有一条边 $ i \to j , i<j $ ,那么 $ \sum_{k=j+1}^{k\le i} q_k \ge 1 $ ;有一条边 $ i \to j , j<i $ ,那么 $ \sum_{k=i+1}^{k\le j} q_k \le 1 $
然后发现一些性质,在最优方案中 $ q_i \in { 0,1 } $ 。
然后 $ O(N^3) $ DP即可。
To be continue...

浙公网安备 33010602011771号