首先是斯特林反演的公式:
[f(i)=sum_{j=0}^iegin{Bmatrix}i\jend{Bmatrix}g(j) Longleftrightarrow g(i)=sum_{j=0}^i(-1)^{i-j}egin{bmatrix}i\jend{bmatrix}f(j)
]
[f(i)=sum_{j=i}^Negin{Bmatrix}j\iend{Bmatrix}g(j) Longleftrightarrow g(i)=sum_{j=i}^N(-1)^{j-i}egin{bmatrix}j\iend{bmatrix}f(j)
]
然后考虑这玩意的意义:
(n) 个有标号的物品,设:在某种条件下把它们弄成允许相同的方案数为 (G(n)),全部不同的方案数为 (F(n))。
那么枚举这 (n) 个物品的集合划分方案,让每个集合里的物品相同,不同集合的物品不同,那么易得$$G(n)=sum_{i=0}^negin{Bmatrix}niend{Bmatrix}F(i)$$
运用斯特林反演$$F(n)=sum_{i=0}n(-1){n-i}egin{bmatrix}niend{bmatrix}G(i)$$
一般来说 (G(n)) 相对好求一些,那么我们就可以这么算 (F(n)) 了。
例题
[雅礼集训——方阵]
给出一个 (n imes m) 大小的矩形,每个位置可以填上 ([1,c]) 中的任意一个数,要求填好后任意两行互不等价且任意两列互不等价,求方案数。
运用上述方法,把一行看作一个物品,则易知 (G(i)=(c^i)^{underline{m}})。
斯特林反演后统计答案即可。分治NTT算第一类斯特林数并用多点求值算下降幂可以做到 (O(nlog^2n))。