题目:http://acm.hdu.edu.cn/showproblem.php?pid=2519
能想到C(n,m)=C(n-1,m)+C(n-1,m-1),很快就可以解出。当然,也可以弄个大整数运算来做,麻烦了,走弯路了。
1
#include
<
iostream
>
2 using namespace std;
3 #define PERSON_MAX_NUM 31
4
5 int pailie[PERSON_MAX_NUM][PERSON_MAX_NUM];
6
7 void main()
8 {
9 int T;
10 cin >> T;
11
12 for ( int i = 0 ;i < T;i ++ )
13 {
14 int N,M;
15 cin >> N >> M;
16 if (N < M)
17 cout << 0 << endl;
18 else {
19 if (M > N / 2 )
20 M = N - M;
21 for ( int j = 0 ;j < PERSON_MAX_NUM;j ++ )
22 {
23 pailie[j][ 0 ] = 1 ;
24 }
25 pailie[ 0 ][ 1 ] = 0 ;
26
27 for (j = 1 ;j <= N;j ++ )
28 {
29 for ( int k = 0 ;k <= j;k ++ )
30 {
31 pailie[j][k] = pailie[j - 1 ][k] + pailie[j - 1 ][k - 1 ];
32 }
33 }
34 cout << pailie[N][M] << endl;
35 }
36 }
37 }
2 using namespace std;
3 #define PERSON_MAX_NUM 31
4
5 int pailie[PERSON_MAX_NUM][PERSON_MAX_NUM];
6
7 void main()
8 {
9 int T;
10 cin >> T;
11
12 for ( int i = 0 ;i < T;i ++ )
13 {
14 int N,M;
15 cin >> N >> M;
16 if (N < M)
17 cout << 0 << endl;
18 else {
19 if (M > N / 2 )
20 M = N - M;
21 for ( int j = 0 ;j < PERSON_MAX_NUM;j ++ )
22 {
23 pailie[j][ 0 ] = 1 ;
24 }
25 pailie[ 0 ][ 1 ] = 0 ;
26
27 for (j = 1 ;j <= N;j ++ )
28 {
29 for ( int k = 0 ;k <= j;k ++ )
30 {
31 pailie[j][k] = pailie[j - 1 ][k] + pailie[j - 1 ][k - 1 ];
32 }
33 }
34 cout << pailie[N][M] << endl;
35 }
36 }
37 }