您的位置:首页 > 其它

poj--1306 Combinations(组合数)

2016-05-27 23:09 423 查看
poj 1306

题意

计算组合数 (nm)

题解

没有取模又需要求精确解,阶乘计算不得,逆元求不得。

根据二项式系数公式:

(nm)=(n−1m)+(n−1m−1)

直接递推求解。

#include <iostream>
#include <cstdio>
using namespace std;

typedef long long ll;
const int maxn = 100 + 10;

struct Solution{
ll  c[maxn][maxn];
int n, m;

void read(int _n, int _m){ n = _n, m = _m; }

Solution():n(0), m(0){ dp(); }

void dp(){
for(int i = 0; i < maxn; ++i) c[i][0] = 1;
for(int i = 1; i < maxn; ++i){
for(int j = 1; j < maxn; ++j)
c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
}
}

void solve(){
printf("%d things taken %d at a time is %I64d exactly.\n", n, m, c
[m]);
}

};
int main()
{
int n, m;
Solution s;
while(cin >> n >> m && (n || m)){
s.read(n, m);
s.solve();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj math 组合数