题目: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 }