zoukankan      html  css  js  c++  java
  • CF932 E. Team Work 结题报告

    CF932 E. Team Work

    题意

    [sum_{i=0}^ninom{n}{i}i^k ]

    其中(nle 10^9,kle 5000),对(mod=998244353)取模


    事实证明我斯特林数学到狗身上去了...

    关于斯特林数的一个常用公式是

    [x^n=sum_{i=1}^xinom{x}{i}{n race i}i! ]

    然后带进去推一波式子就完事了

    [egin{aligned} sum_{i=0}^ninom{n}{i}i&=sum_{i=0}^ninom{n}{i}sum_{j=1}^kinom{i}{j}{krace j}j!\ &=sum_{j=1}^k{k race j}sum_{i=0}^ninom{n}{i}inom{i}{j}j!\ &=sum_{j=1}^k{k race j}sum_{i=0}^nfrac{n!}{(n-i)!(i-j)!}\ &=sum_{j=1}^k{k race j}sum_{i=0}^nfrac{n!(n-j)!}{(n-i)!(i-j)!(n-j)!}\ &=sum_{j=1}^k{k race j}n^{underline j}sum_{i=0}^ninom{n-j}{n-i}\ &=sum_{j=1}^k{k race j}n^{underline j}2^{n-j} end{aligned} ]


    Code:

    #include <cstdio>
    const int mod=1e9+7;
    inline int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
    #define mul(x,y) (1ll*(x)*(y)%mod)
    inline int qp(int d,int k){int f=1;while(k){if(k&1)f=mul(f,d);d=mul(d,d),k>>=1;}return f;}
    int str[5010][5010],n,k,ans;
    int main()
    {
    	scanf("%d%d",&n,&k);
    	str[0][0]=1;
    	for(int i=1;i<=k;i++)
    		for(int j=1;j<=i;j++)
    			str[i][j]=add(str[i-1][j-1],mul(str[i-1][j],j));
    	for(int i=1,f=1;i<=n&&i<=k;i++)
    	{
    		f=mul(f,n-i+1);
    		ans=add(ans,mul(f,mul(str[k][i],qp(2,n-i))));
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    

    2019.3.27


  • 相关阅读:
    第十二周学习进度条
    课堂练习四
    搜狗输入法
    第十一周学习进度条
    《代码大全(第二版)》阅读笔记01
    典型用户及用户场景描述
    第十周学习进度条
    团队冲刺第六天
    团队冲刺第五天
    团队冲刺第四天
  • 原文地址:https://www.cnblogs.com/butterflydew/p/10608874.html
Copyright © 2011-2022 走看看