P7967 [COCI2021-2022#2] Magneti 题解

· · 题解

前言

这篇题解是对 @zlttql 的巨佬思路的补充

分析

首先我们知道如果 r_i< r_j 那么如果 r_j 这一个约束条件满足了则 r_i 则不需要满足。

那么我们可以从小到大排序,每次插入一个磁铁。

DP 状态

这里我们需要解释一下“联通块”的意义: “连通块”指几个磁铁通过“制约”连成的联通块,且“连通块”的两端没有“制约”(因为是按照从小到大插入的,所以两端的只需要满足大的能插进来就行了) 上图片:(黑色代表磁铁,红色代表磁铁的范围,橙色代表连通块) 此时 $r_1=2$ 即能吸引半径 $1$ 以内的磁铁,但是联通块只有黑色的那一块 ![](https://i.bmp.ovh/imgs/2022/03/aa5e449e7cb8666e.png) 此时加入一个 $r_2=3$ 即能吸引半径 $2$ 以内的磁铁的磁铁,并且使它们形成“连通块”。因为要连成“连通块”,那么就必须“挨在一起”,如下图。 ![](https://i.bmp.ovh/imgs/2022/03/b9154b4511d9eb0f.png) 则因为第 $2$ 块磁铁加入满足制约那么第 $1$ 块磁铁就一定满足,所以没必要记第一块磁铁的“制约”。即“连通块”只需要满足最左和最右不会被“吸引”即可。 DP 状态如楼上。 我们有三个转移: 第 $i$ 个磁铁单独成为了一个新组: $f_{i,j,k} \to f_{i-1,j-1,k-1}

i 个磁铁接在第 j 个组的端点: f_{i,j,k} \to f_{i,j,k} + f_{i-1,j,k-r_i} \times j \times 2 (k \ge r_i)

i 个磁铁把两个“连通块”接了起来:f_{i,j,k} \to f_{i,j,k} + f_{i-1,j+1,k-2 \times r_i+1} \times j \times (j+1) (k \ge 2\times r_i+1)

至于那两个接起来其实无所谓,只需要记下 i,j,k 的个数有多少即可。

最后运用插板法知答案为 \sum^l_{i=1}f_{n,1,i} \times \binom{l-i+n}{n}