好的 DP 题,但是感觉手玩几下就出来了。
先只考虑第一个限制。手玩一下得到,原树的结构是不变。需要考虑,在原树上的一条边插入一个新节点,或者在一个节点下方加一个新节点。
考虑 $k=0$ 的情况,从小到大考虑,那么与上面一样只有两种操作。每次插入有 $2n-1$ 种选择,插入后变为 $n+1$ 的情况。以此类推得到答案 $\displaystyle\prod_{i=n}^{n+m-1}(2i-1)$。期望得分 $\text{35 pts}$(实测有 $\text{50 pts}$)。
考虑 $k\le 10$ 的情况。第二个限制相当于对于 $[1,i]$ 的所有节点所构成的虚树属于 $[1,i+k]$。依然从小到大考虑,不同于 $k=0$ 的两种操作,我们可以进行这样一种操作:在一条边上插入一个新节点 $x$,在 $x$ 节点下方插入一个新节点 $y$,满足 $y<x\le y+k$。而对于当前状态,我们先填上 $y$,再状压记录空白节点 $x$ 的上限 $y+k$,之后填上 $x$。
于是设计状态 $f(i,S)$ 表示填到 $i$,未填的节点的上限状态为 $S$ 的方案数。那么有几种转移,其中 $size=n+\text{popcount}(S)$:
- 在一条边插入一个新节点 $i$,系数为 $size-1$。
- 在一个节点下方加一个新节点 $i$,系数为 $size$。
- 在一条边插入一个空白节点,将 $i$ 加在空白节点下方。
- 在一个空白节点上填上 $i$。
时间复杂度 $\mathcal O(Tmk2^k)$。答案与原树的形态无关。
感觉挺平凡的,但是又比较巧妙。
Code
1 |
|