题意
求$sum_{i=1}^{n}{C(n,i)*i^k}$,其中$n leq 10^9 ,k leq 5000$。
思考?
看到$i^k$,k那么小,直接第二类斯特林数。比较简单,就请允许我鸽了吧。
刚开始还想BM,当然T了。
代码

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