• 【CF932E】Team Work(第二类斯特林数)


    【CF932E】Team Work(第二类斯特林数)

    题面

    洛谷
    CF
    (sum_{i=1}^nC_{n}^i*i^k)

    题解

    寒假的时候被带飞,这题被带着写了一遍。事实上并不难,我们来颓柿子。
    首先回忆一下第二类斯特林数关于整数幂的计算公式:

    [m^n=sum_{i=0}^mC_{m}^i*S(n,i)*i! ]

    (m^n)理解为把(n)个不同的球放到(m)个不同的盒子中去。那么我们枚举有几个盒子非空,用第二类斯特林数乘阶乘计算放置的方案数,最后求和就是结果。
    那么直接把(i^k)展开

    [sum_{i=1}^nC_n^isum_{j=0}^iC_i^j*S(k,j)*j! ]

    把组合数直接拆开

    [sum_{i=1}^nfrac{n!}{i!(n-i)!}sum_{j=0}^ifrac{i!}{j!(i-j)!}*S(k,j)*j! ]

    化简之后的结果就很好看了。

    [sum_{i=1}^nfrac{n!}{(n-i)!}sum_{j=0}^ifrac{S(k,j)}{(i-j)!} ]

    (n)的范围太大,而(k)的范围很小,所以考虑把斯特林数提出来放到外层循环

    [sum_{j=0}^nS(k,j)sum_{i=j}^nfrac{n!}{(n-i)!}*frac{1}{(i-j)!} ]

    因为第二类斯特林数(S(k,j))如果(j>k)那么结果就是(0),所以可以不需要考虑。那么式子可以化简$$sum_{j=0}^{min(n,k)}S(k,j)sum_{i=j}^nfrac{n!}{(n-i)!}*frac{1}{(i-j)!}$$
    后面的阶乘孤零零的,给他配点东西就好看了。

    [sum_{j=0}^{k}S(k,j)sum_{i=0}^nfrac{n!}{(n-j)!}frac{(n-j)!}{(n-i)!(i-j)!} ]

    [sum_{j=0}^{k}S(k,j)frac{n!}{(n-j)!}sum_{i=0}^nC_{n-j}^{i-j} ]

    [sum_{j=0}^{k}S(k,j)frac{n!}{(n-j)!}2^{n-j} ]

    因为(k)只有(5000),所以(i)的起始位置最多只有(5000)个,那么直接(O(k))考虑计算即可。
    斯特林数暴力(O(k^2))预处理,总的复杂度(O(k^2))

    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define MOD 1000000007
    #define inv2 500000004
    #define MAX 5050
    int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
    int n,k,S[MAX][MAX],ans;
    int main()
    {
    	scanf("%d%d",&n,&k);S[0][0]=1;
    	for(int i=1;i<=k;++i)
    		for(int j=1;j<=k;++j)
    			S[i][j]=(S[i-1][j-1]+1ll*S[i-1][j]*j)%MOD;
    	for(int j=0,pw=fpow(2,n),nw=1;j<=min(n,k);pw=1ll*pw*inv2%MOD,nw=1ll*nw*(n-j)%MOD,++j)
    		ans=(ans+1ll*S[k][j]*nw%MOD*pw%MOD)%MOD;
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    Problem C: 爬楼梯
    Problem E: 倒水(Water)
    Problem H: tmk买礼物
    HDU 1078 FatMouse and Cheese
    POJ 3186 Treats for the Cows
    POJ 1661 Help Jimmy
    POJ 1458 Common Subsequence
    2018-软工机试-D-定西
    2018-软工机试-F-庙会
    2018-软工机试-C-和你在一起
  • 原文地址:https://www.cnblogs.com/cjyyb/p/9706019.html
Copyright © 2020-2023  润新知