hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***

插板法基础知识

斯特林数见百科

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 #include<cstring>
 5 #define LL long long
 6 #define eps 1e-7
 7 #define MOD 1000000007
 8 using namespace std;
 9 int c[2001][2001]={1},stir2[1005][1005]={1};
10 int main(){
11     for(int i=1;i<=2000;i++){
12         c[i][0]=c[i][i]=1;
13         for(int j=1;j<i;j++)
14             c[i][j]=(c[i-1][j-1]+c[i-1][j])%MOD;
15     }
16     for(int i=1;i<=1000;i++){
17         stir2[i][0]=0;
18         stir2[i][i]=1;
19         for(int j=1;j<i;j++)
20             stir2[i][j]=((LL)j*stir2[i-1][j]+stir2[i-1][j-1])%MOD;
21     }
22     int n,r,k,m;
23     while(cin>>n>>r>>k>>m){
24         int sum=0;
25         if(n-((r-1)*k+1)<0){
26             cout<<0<<endl;
27             continue;
28         }
29         for(int i=1;i<=min(r,m);i++)
30             sum=(sum+stir2[r][i])%MOD;
31         cout<<((LL)c[n-((r-1)*k+1)+r+1-1][r]*sum)%MOD<<endl;
32     }
33     return 0;
34 }
原文地址:https://www.cnblogs.com/cnblogs321114287/p/4712239.html