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
",cas,f[n]);
39     }
40     return 0;
41 }
原文地址:https://www.cnblogs.com/SilverNebula/p/5896300.html