[CF932E]Team Work

题意

求$\sum_{i=1}^{n}{C(n,i)*i^k}$,其中$n \leq 10^9 ,k \leq 5000$。


思考?

看到$i^k$,k那么小,直接第二类斯特林数。比较简单,就请允许我鸽了吧。

刚开始还想BM,当然T了。


代码

 1 // luogu-judger-enable-o2
 2 #include<bits/stdc++.h>
 3 #define mod 1000000007
 4 using namespace std;
 5 typedef long long int ll;
 6 const int maxn=5E3+5;
 7 ll n,k,ans,S[maxn][maxn];
 8 inline ll qpow(ll x,ll y)
 9 {
10     ll ans=1,base=x;
11     while(y)
12     {
13         if(y&1)
14             ans=ans*base%mod;
15         base=base*base%mod;
16         y>>=1;
17     }
18     return ans;
19 }
20 void init()
21 {
22     S[0][0]=1;
23     for(int i=1;i<=k;++i)
24         for(int j=1;j<=k;++j)
25             S[i][j]=(S[i-1][j-1]+S[i-1][j]*(ll)j)%mod;
26 }
27 int main()
28 {
29     ios::sync_with_stdio(false);
30     cin>>n>>k;
31     init();
32     ll now=1;
33     for(int i=0;i<=k;++i)
34     {
35         ans=(ans+S[k][i]*now%mod*qpow(2,n-i)%mod)%mod;
36         now=now*(n-i)%mod;
37     }
38     if(k==0)
39         --ans;
40     cout<<ans<<endl;
41     return 0;
42 }
View Code

猜你喜欢

转载自www.cnblogs.com/GreenDuck/p/11409354.html
今日推荐