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 }

 

你可能感兴趣的:(HDU)