斯特林反演

首先是斯特林反演的公式:
\[f(i)=\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}g(j) \Longleftrightarrow g(i)=\sum_{j=0}^i(-1)^{i-j}\begin{bmatrix}i\\j\end{bmatrix}f(j)\]
然后考虑这玩意的意义:
\(n\) 个有标号的物品,设:在某种条件下把它们弄成允许相同的方案数为 \(G(n)\),全部不同的方案数为 \(F(n)\)
那么枚举这 \(n\) 个物品的集合划分方案,让每个集合里的物品相同,不同集合的物品不同,那么易得\[G(n)=\sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}F(i)\]
运用斯特林反演\[F(n)=\sum_{i=0}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}G(i)\]
一般来说 \(G(n)\) 相对好求一些,那么我们就可以这么算 \(F(n)\) 了。

例题

[雅礼集训——方阵]
给出一个 \(n\times m\) 大小的矩形,每个位置可以填上 \([1,c]\) 中的任意一个数,要求填好后任意两行互不等价且任意两列互不等价,求方案数。
运用上述方法,把一行看作一个物品,则易知 \(G(i)=(c^i)^{\underline{m}}\)
斯特林反演后统计答案即可。分治NTT算第一类斯特林数并用多点求值算下降幂可以做到 \(O(nlog^2n)\)

猜你喜欢

转载自www.cnblogs.com/bestwyj/p/11247429.html