UVa10234 Race
递推,设有i个人排在第一名,剩下的人排在后面,方案有f[i]种,则f[i]=sum(c[n][i]*f[n-i]) 1<=i<=n
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 const int mod=10056; 9 const int mxn=1020; 10 int read(){ 11 int x=0,f=1;char ch=getchar(); 12 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 13 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 14 return x*f; 15 } 16 int c[mxn][mxn]; 17 int f[mxn]; 18 int n,T; 19 void clc(){ 20 for(int i=0;i<mxn;i++)c[i][0]=1; 21 for(int i=1;i<mxn;i++) 22 for(int j=1;j<=i;j++){ 23 c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; 24 } 25 f[0]=1; 26 for(int i=1;i<mxn;i++) 27 for(int j=1;j<=i;j++) 28 f[i]=(f[i]+c[i][j]*f[i-j])%mod; 29 return; 30 } 31 int main(){ 32 clc(); 33 T=read(); 34 int cas=0; 35 while(T--){ 36 cas++; 37 n=read(); 38 printf("Case %d: %d\n",cas,f[n]); 39 } 40 return 0; 41 }
本文为博主原创文章,转载请注明出处。