题意
给定(n),对于(kin[0,n)),分别计算对于排列({1,2,cdots,n}),进行最多(k)次操作,每次选择一个数字拿到前面或后面,形成的排列个数
(nle 1000)
做法
最多进行(k)次操作等价于排列中最长上升子段长度(ge n-k)
固定(k),下面考虑计算排列中最长上升子段长度(le k)的方案数
直接做显然不好做,考虑构造容斥系数
我们想通过egf得到答案,(ans=[x^n]sumlimits_{i=1}^{infty}(sumlimits_{j=1}^{n}f_jfrac{x^j}{j!})^i)
构造满足条件(sumlimits_{i=1}^{infty}(sumlimits_{j=1}^{n}f_jx^j)^i=sumlimits_{i=1}^k x^i)
令(F(x)=sumlimits_{i=1}^n f_ix^i)
(egin{aligned}
sumlimits_{i=1}^{infty}F(x)^i&=sumlimits_{i=1}^k x^i\
1+sumlimits_{i=1}^{infty}F(x)^i&=sumlimits_{i=0}^k x^i\
frac{1}{1-F(x)}&=frac{x^{k+1}-1}{x-1}\
F(x)&=1-frac{x-1}{x^{k+1}-1}\
F(x)&=sumlimits_{ige 0}x^{(k+1)i+1}-sumlimits_{ige 1}x^{(k+1)i}\
end{aligned})
由于(F(x))有效位置并不多,暴力计算即可
(O(n^2lnn))