AGC060C Large Heap 题解 / 计数 dp

题目传送门:AGC060C Large Heap

首先这个东西完全就是一个满二叉树的堆,相当于权值顺序要为一个拓扑,且 \(U\)\(V\) 前面。

\(U,V\)\(A+1\)\(B+1\) 层的最左和左右端点。

那么 \(U,V\) 分别是两条最左或最右的链。

而拓扑序的开头一定为 \(1\),分成两棵树,然后再找一个根再分裂,那么我们只需要考虑存在 \(U,V\) 的树,剩下的随便填即可,那么最主要的就是存在 \(U,V\) 的两棵树的深度。

考虑 dp,设 \(s_i\) 表示深度为 \(i\) 满二叉树拓扑方案数,\(g_{i,j}\) 表示两棵树的深度分别为 \(i,j\) 的方案数,\(f_{i,j}\) 表示概率。

转移的话考虑选择左右那个树。

\[s_i = s_{i-1}^2 C_{2^i-2}^{2^{i-1}-1} \]

\[g_{i,j}=g_{i-1,j} s_{i-1} C_{2^i+2^j-3}^{2^{i-1}-1} + g_{i,j-1}s_{j-1}C_{2^i+2^j-3}^{2^j-1} \]

\[f_{i,j}=\frac{g_{i,j}}{s_is_jC_{2^i+2^j-2}^{2^i-1}} \]

\(g_{i,j}\) 代入 \(f_{i,j}\) 并用 \(f\) 表示 \(g\) 化简可得

\[f_{i,j}=f_{i-1,j}\frac{2^i-1}{2^i+2^j-2} + f_{i,j-1}\frac{2^j-1}{2^i+2^j-2} \]

显然初始时 \(f_{n-A,j}=1\) 其中 \(j\ge n-B\)

posted @ 2026-01-17 18:31  OTn53_qwq  阅读(0)  评论(0)    收藏  举报