【洛谷P5825 排列计数】【生成函数+二项式反演/欧拉数】

题意

我们记一个排列 P P P的升高为 k k k当且仅当存在 k k k个位置 i i i使得 P i < P i + 1 P_i < P_{i+1} Pi<Pi+1
现在给定排列长度 n n n,对于所有整数 k ∈ [ 0 , n ] k\in [0,n] k[0,n],求有多少个排列的升高为 k k k
n ≤ 200000 n\le 200000 n200000

做法一

考虑钦定 k k k个位置为 < < <,其他位置不管。对 ( n − 1 k ) \binom{n-1}{k} (kn1)种不同取法的方案数求和,记为 g k g_k gk
如果把关系为 < < <的相邻两个位置合并,则共有 n − k n-k nk个集合,记第 i i i个集合的大小为 s i s_i si,则合法的排列数量为 n ! ∏ s i ! \frac{n!}{\prod s_i!} si!n!

因此 g k = ∑ s i n ! ∏ s i ! g_k=\sum_{s_i}\frac{n!}{\prod s_i!} gk=sisi!n!

写成生成函数的形式,就是 g k = n ! [ x n ] ( e x − 1 ) m = n ! [ x n ] ∑ i = 0 m ( m i ) ( − 1 ) m − i e i x = n ! ∑ i = 0 m ( m i ) ( − 1 ) m − i i n i ! \begin{aligned} g_k&=n! [x^n] (e^x-1)^m\\ &=n! [x^n] \sum_{i=0}^m\binom{m}{i}(-1)^{m-i}e^{ix}\\ &=n! \sum_{i=0}^m\binom{m}{i}(-1)^{m-i}\frac{i^n}{i!} \end{aligned} gk=n![xn](ex1)m=n![xn]i=0m(im)(1)mieix=n!i=0m(im)(1)mii!in

把组合数展开然后FFT就可以求出 g k g_k gk

f k f_k fk表示答案,不难发现 g i = ∑ j = i n − 1 ( j i ) f j g_i=\sum_{j=i}^{n-1}\binom{j}{i}f_j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值