组合计数

CF1874E Jellyfish and Hack

我会 \(O(n^6)\)!令 \(f_{n,i}\) 表示长度为 \(n\) 快排次数为 \(i\) 的排列数。转移:

\[f_{n,i}=\sum_{t=1}^n \binom{n-1}{t-1}\sum_{j=0}^{i-n} f_{t-1,j}\times f_{n-t,i-n-j} \]

考虑优化。不妨将转移写成多项式的形式,令 \(F_n=\sum\limits_{i=0}^{+\infty} f_{n,i}\cdot x^i\)。得到:

\[[x^i]F_n=\sum_{t=1}^n \binom{n-1}{t-1}\sum_{j=0}^{i-n} [x^j]F_{t-1}\times [x^{i-n-j}]F_{n-t} \\ \Rightarrow [x^i]F_n=[x^{i-n}]\sum_{t=1}^n \binom{n-1}{t-1} F_{t-1}F_{n-t} \\ \Rightarrow F_n=x^n\sum_{t=1}^n \binom{n-1}{t-1} F_{t-1}F_{n-t} \]

我们要求的就是 \(F_n\) 的各项系数,考虑系数转点值。注意到由于 \(\deg F=O(n^2)\),只需要知道 \(O(n^2)\) 个点值就可以拉插出 \(F_n\) 的系数。直接取 \(O(n^2)\) 个位置带进去求 \(F_n(x_0),F_n(x_1),\dots\),此时多项式退化成了点值,求一个 \(F_n(x_k)\) 的复杂度只有 \(O(n^2)\) 了,因此求这 \(O(n^2)\) 个点值的复杂度就是 \(O(n^4)\),拉插需要 \(O(n^4)\)。总时间复杂度 \(O(n^4)\),可以通过。

回顾一下拉插,设 \(n\) 次多项式 \(f(x)\) 过 \(n+1\) 个点 \((x_i,y_i)\),则有:

\[f(x)=\sum_{i=0}^n y_i\prod_{j\ne i} \frac{x-x_j}{x_i-x_j} \]

核心在于得到 \(l_i(x)=\prod\limits_{j\ne i} (x-x_j)\) 中 \(x\) 的各项系数。令 \(T=\prod_j (x-x_j)\),那么 \(l_i(x)=\frac{T}{x-x_i}\),可以用大除法(多项式除法)求出其各项系数。

P6846 [CEOI 2019] Amusement Park

DAG 子图计数。DAG 的性质就是可以不断剥离 \(\deg=0\) 的点将图删空。

令 \(f_S\) 表示点集为 \(S\) 的 DAG 子图数量。枚举零度点集 \(T\subseteq S\),要求 \(T\) 是独立集,转移:\(f_S=\sum\limits_{T\subseteq S} \mathrm{chk}(T)\cdot f_{S\setminus T}\)。发现算重了,原因是同一种定向方案中,零度点存在多种按层剥离方案。感觉上讲 \((-1)^{|T|+1}\) 就是容斥系数,严谨推导:设此时真正的极大零度点集为 \(P\),那么 \(P\) 可以被 \(T\subseteq P\) 统计到,需要配出系数 \(v\) 使得 \(\sum\limits_{T\subseteq P} v_{|T|}=1\),即 \(\sum\limits_{k=1}^{|S|}\binom{|S|}{i} v_i=1\),配 \(v_i=(-1)^{i+1}\) 二项式就可以了。

P10221 [省选联考 2024] 重塑时光

切了,其实没有黑吧(

首先我们发现切出空串很烦,那么直接钦定切出来的都不是空串,这样 \(i\) 个段排列的方案数就是 \(i!\),再把剩下的刀插进去,推一下系数是 \(\binom{k+1}{i}\)。那么问题转化成:将原图划分成若干大点,这些大点组成的图是 DAG,对方案的贡献是各个大点内部拓扑序数量的乘积。令 \(h_S,g_{S,i},f_{S,i}\) 分别表示 \(S\) 导出子图的拓扑序数量、划分成若干独立大点的方案数、原问题的方案数。\(h_S\) 可以直接枚举拓扑序第一个位置填什么。对于 \(g_{S,i}\) 就是每次剥离出来一个独立的集合 \(T\),套路的钦定 \(\mathrm{lowbit}(T)=\mathrm{lowbit}(S)\) 来保证剥离顺序的唯一性。\(f_{S,i}\) 就是一个 DAG 子图计数,转移:

\[f_{S,i}\leftarrow \sum_{\varnothing\ne T\subseteq S}[\mathrm{cross}(T,S\setminus T)=0]\cdot \sum_{j=1}^{i} f_{S\setminus T,i-j} \times g_{T,j}\times (-1)^{j+1} \]

直接转移是 \(O(3^nn^2)\) 的,但是通过了/hanx。

然后就是用刚刚那个 CF1874E 的 Trick 即可优化到 \(O(3^n n)\)。

posted @ 2026-10-26 11:24  STDJCY  阅读(12)  评论(0)    收藏  举报