斯特林数Stirling小结


放球问题即可

考虑现在有 n n n 个元素, x x x 种颜色,有 k k k 个环,那么 k k k 个环的方案数就是 S 1 ( n , k ) S_1(n,k) S1(n,k)
也可以一个一个元素的放,要么加入之前的位置 i − 1 i-1 i1,要么 独自成环 x x x
那么就是 x ∗ ( x + 1 ) ∗ ( x + 2 ) ∗ . . . ∗ ( x + n − 1 ) x*(x+1)*(x+2)*...*(x+n-1) x(x+1)(x+2)...(x+n1)

x n ‾ = ( − 1 ) n ( − x ) n x^{\underline n }=(-1)^n(-x)^n xn=(1)n(x)n
x n ‾ = ( − 1 ) n ( − x ) n ‾ x^{\overline n }=(-1)^n(-x)^{\underline n} xn=(1)n(x)n
利用这个转化即可

[省选联考 2020 A 卷] 组合数问题
在这里插入图片描述
∑ i = 0 n x i f ( i ) ( n i ) = ∑ i = 0 m a i ∑ j = 0 n j i x j ( n j ) = ∑ i = 0 n a i ∑ k = 0 i { i k } ∑ j = 0 n j k ‾ x j ( n j ) \sum_{i=0}^nx^if(i)\binom{n}{i}=\sum_{i=0}^ma_i\sum_{j=0}^nj^ix^j\binom{n}{j}=\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}\sum_{j=0}^nj^{\underline k}x^j\binom{n}{j} i=0nxif(i)(in)=i=0maij=0njixj(jn)=i=0naik=0i{ik}j=0njkxj(jn)
考虑右边三个的组合意义,
j j j 个位置,并给这 j j j 个染色(颜色从 1 1 1 x x x ),再选出 k k k 个排队
可以先选出 k k k 个排队,再给这 k k k 个染色,再从剩下的 n − k n-k nk 个选 j − k j-k jk 个再染色,于是有
∑ i = 0 n a i ∑ k = 0 i { i k } ∑ j = 0 n j k ‾ x j ( n j ) = ∑ i = 0 n a i ∑ k = 0 i { i k } ∑ j = 0 n n k ‾ x k x j − k ( n − k j − k ) \sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}\sum_{j=0}^nj^{\underline k}x^j\binom{n}{j}=\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}\sum_{j=0}^nn^{\underline k}x^kx^{j-k}\binom{n-k}{j-k} i=0naik=0i{ik}j=0njkxj(jn)=i=0naik=0i{ik}j=0nnkxkxjk(jknk)
= ∑ i = 0 n a i ∑ k = 0 i { i k } n k ‾ x k ∑ j = 0 n x j − k ( n − k j − k ) = ∑ i = 0 n a i ∑ k = 0 i { i k } n k ‾ x k ∑ j = 0 n − k x j ( n − k j ) =\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}n^{\underline k}x^k\sum_{j=0}^nx^{j-k}\binom{n-k}{j-k}=\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}n^{\underline k}x^k\sum_{j=0}^{n-k}x^{j}\binom{n-k}{j} =i=0naik=0i{ik}nkxkj=0nxjk(jknk)=i=0naik=0i{ik}nkxkj=0nkxj(jnk)
= ∑ i = 0 n a i ∑ k = 0 i { i k } n k ‾ x k ( x + 1 ) n − k =\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}n^{\underline k}x^k(x+1)^{n-k} =i=0naik=0i{ik}nkxk(x+1)nk
= ∑ i = 0 n a i ∑ j = 0 i { i j } n j ‾ x j ( x + 1 ) n − j =\sum_{i=0}^n a_i\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}n^{\underline j}x^j(x+1)^{n-j} =i=0naij=0i{ij}njxj(x+1)nj
然后就能 O ( k 2 ) O(k^2) O(k2) 算了

int n,x,m;
int a[MAXN+5];
int S2[MAXN+5][MAXN+5],nd[MAXN+5];
void Init(){
	S2[0][0]=1;
	for(int i=1;i<=MAXN;i++)
		for(int j=1;j<=i;j++)
			S2[i][j]=Add(Mul(j,S2[i-1][j]),S2[i-1][j-1]);
	return ;
}
int main(){
	n=read(),x=read(),Mod=read(),m=read();
	Init();
	for(int i=0;i<=m;i++)
		a[i]=read();
	nd[0]=1;
	for(int i=1;i<=min(n,m);i++)
		nd[i]=Mul(nd[i-1],(n-i+1));
	int ans=0;
	for(int t=0;t<=m;t++){
		int tmp=0;
		for(int i=0;i<=min(n,t);i++)
			tmp=Add(tmp,Mul(Mul(S2[t][i],nd[i]),Mul(Pow(x+1,n-i),Pow(x,i))));
		ans=Add(ans,Mul(a[t],tmp));
	}
	printf("%d\n",ans);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值