poj2249

Binomial Showdown

  使用C(n,k)与C(n,k-1)的递推关系来求组合数。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#define INF 0x7fffffff
#define mst(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn=1e6+5;
ll ans[maxn];
int ()
{
ll n,m;
mst(ans,0);
while(cin>>n>>m&&n){
ans[0]=1;
if(n-m<m)
m=n-m;
else{
for(int i=1;i<=m;i++)
ans[i]=(n-i+1)*ans[i-1]/i;
}
cout<<ans[m]<<endl;
}
return 0;
}