HDU1292+递推

唉。。看题解过的。。。

View Code
 1 /*
 2 题意:
 3 给定n个人,求组队的方法数。
 4 关键:首先要分情况,1个队,2个队,3个队。。。
 5 递推:
 6 a[ i ][ j ]:前i个人分成j个队的方法数。
 7 a[i][j] = a[i-1][j-1](第i个人自成一队)+a[i-1][j]*j(第i个人加入了j个队中的某个队);
 8 */
 9 #include<stdio.h>
10 #include<string.h>
11 #include<stdlib.h>
12 #include<algorithm>
13 #include<iostream>
14 #include<queue>
15 #include<vector>
16 #include<map>
17 #include<math.h>
18 typedef long long ll;
19 //typedef __int64 int64;
20 const int maxn = 25;
21 const int maxm = 25;
22 const int inf = 0x7FFFFFFF;
23 const double pi = acos(-1.0);
24 const double eps = 1e-8;
25 using namespace std;
26 ll a[ maxn ][ maxm ];
27 void init(){
28     memset( a,0,sizeof( a ) );
29     a[ 1 ][ 1 ] = 1;
30     for( int i=2;i<maxn;i++ ){
31         for( int j=1;j<=i;j++ ){
32             if( j==1||j==i ) a[i][j] = 1;
33             else a[i][j] = a[i-1][j-1]+a[i-1][j]*j;
34         }
35     }
36 }
37 int main(){
38     int ca;
39     scanf("%d",&ca);
40     init();
41     while( ca-- ){
42         int n;
43         scanf("%d",&n);
44         ll ans = 0;
45         for( int i=1;i<=n;i++ )
46             ans += a[n][i];
47         printf("%I64d\n",ans);
48     }
49     return 0;
50 }

 

posted @ 2013-05-03 15:04  xxx0624  阅读(222)  评论(0编辑  收藏  举报