CF869C题解

题面

Description:
\(a\) 个红色岛,\(b\) 个蓝色岛,\(c\) 个紫色岛,在岛之间连边,使得任意两个同色岛屿之间的距离不小于 \(3\),问有几种连边方法。


不用组合数的 DP 方法。
明显,答案是 \(\text{红色岛和蓝色岛之间的连边方法数}\times\text{蓝色岛和紫色岛之间的连边方法数}\times\text{红色岛和紫色岛之间的连边方法数}\)
考虑到它们互相独立,我们可以设 \(f(i,j)\) 为在数量为 \(i\) 的颜色的岛与数量为 \(j\) 的颜色的岛之间连边的方案数。比如,\(f(1,1)=2\),因为我既可以选择不连边,也可以选择连一条边。那么,答案就是 \(f(a,b)\times f(b,c)\times f(a,c)\)
考虑 \(f\) 的递推式。明显的,同一个点只能连出去一条边,也可以不连边。如果我连边,则要在 \(j\) 个点中选一个点和它相连,有 \(j\) 种可能性,而 \(i\) 要减一,\(j\) 也要减一。如果我不连边,则只有一种可能性,\(i\) 减一,\(j\) 不变。于是我们得到了方程 $$f(i,j)=f(i-1,j-1)\times j+f(i-1,j)$$

边界条件明显是 \(f(i,0)=f(0,i)=1\)。前面的式子直接递推即可。时间复杂度在默认 \(a,b,c\) 同阶的情况下是 \(O(a^2)\),可以通过本题。

代码

posted @ 2022-05-16 16:09  1358id  阅读(58)  评论(0编辑  收藏  举报