标签:line 组成 begin display rac 生成 节点 任务 sqrt
给定一个数组 \(c\) 和一个数 \(s\) ,求满足以下条件的二叉树数量:
首先设 \(f_i\) 表示 \(i\) 个结点组成的这样的树有 \(f_i\) 个,\(g_i\) 表示数 \(i\) 是否在。那么 \(f_i=\sum_{j=0}^i g_j\sum_{k=0}^{i-j}f_k\cdot f_{i-j-k}\) 。其实也就是 \(f_i=\sum_{i+j+k=i}g_i\cdot f_{j}\cdot f_k\) 。如果 \(F\) 是 \(f\) 的生成函数,\(G\) 是 \(g\) 的生成函数,那么有 \(F^2\cdot G+1=F\) 。注意,这里 \(+1\) 是因为边界。具体来说,\(F^2\cdot G\) 的零次项很明显是 0. 但是 \(f_0 = 1\) 。所以这非常不正确。所以要 \(+1\) 。
那么剩下的任务就是解方程了。\(F^2\cdot G+1=F\),这是个二次方程,但是由于 \(G\) 是一个不可求逆的东西,所以并不能直接套用求根公式。考虑这样做:
很明显,左式没有常数项。若右式取正,那么右式必然有常数项。所以右式取负。
也就是:
所以直接做即可。
标签:line 组成 begin display rac 生成 节点 任务 sqrt
原文地址:https://www.cnblogs.com/skiceanAKacniu/p/13284812.html