uoj424 count

uoj424 count

http://uoj.ac/problem/424

Sol1:

建出序列的笛卡尔树,问题转换成有多少非同构(n)个点的笛卡尔树,满足向左走的链长小于等于(m)

列出递推式(f(i, j) = sum_{k < i} f(k, j - 1) imes f(i - k - 1, j))

(F_j(x) = sum_{i} f(i, j)x^i)

(F_j(x) = F_j(x) xF_{j-1}(x) + 1 ightarrow F_j(x) = frac{1}{1-xF_{j-1}(x)})

接下来就是一个套路记(F_j(x) = frac{A_j(x)} {B_j(x)}),可以推出(A_j(x) = B_{j-1}(x),B_j(x) =B_{j-1}(x) - xcdot A_{j-1}(x))

(n)个单位根带入后IDFT求逆可以求出(F_j(x))

Sol2:

用括号序列表示这颗笛卡尔树,问题转换成有多少长度为(2n)的括号序列,满足任意前缀左括号-右括号<=m

相当于从((0,0))开始走,不能碰到(y_1 = -1, y_2 = m + 1)

我们利用容斥,只需要计算经过(y_1 ightarrow y_2 ightarrow y_1 cdots ightarrow y_1)的方案数。

这是一个经典的问题,利用折线法。

比如我们计算经过(y_0=-1)的方案数,我们考虑路径第一次与(y_0)的交,之后的行走方式就沿着(y_0)翻转,这样到达的终点就是((2n, -2))而不是((2n, 0)),此时右括号的数量是(n+1),所以答案就是(inom {2n} {n + 1})

上面只需要做多次反射就好了,其实这是一个广义卡特兰数。

原文地址:https://www.cnblogs.com/foreverpiano/p/10505726.html