uoj424 count

uoj424 count

http://uoj.ac/problem/424

Sol1:

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

列出递推式\(f(i, j) = \sum_{k < i} f(k, j - 1) \times 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 \rightarrow 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) - x\cdot A_{j-1}(x)\)

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

Sol2:

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

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

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/foreverpiano/p/10505726.html