组合数
来源:互联网 发布:电信有哪些软件 编辑:程序博客网 时间:2024/05/21 14:45
组合数,高中接触过,也一直没有总结过,现在来总结一下水水。
组合数从高中时候就学,蒟蒻就不解释了,越解释越乱。
上公式
其实组合数之间满足杨辉三角的关系
求解组合数一般用到递推的方法,复杂度为O(n^2);
递推的代码:
#include<cstdio>const int N = 2000 + 5;const int MOD = (int)1e9 + 7;int comb[N][N];//comb[n][m]就是C(n,m)void init(){ for(int i = 0; i < N; i ++){ comb[i][0] = comb[i][i] = 1; for(int j = 1; j < i; j ++){ comb[i][j] = comb[i-1][j] + comb[i-1][j-1]; comb[i][j] %= MOD; } }}int main(){ init();}
用求解逆元的方法求解组合数,复杂度O(n);
代码:
#include<cstdio>const int N = 200000 + 5;const int MOD = (int)1e9 + 7;int F[N], Finv[N], inv[N];//F是阶乘,Finv是逆元的阶乘 void init(){ inv[1] = 1; for(int i = 2; i < N; i ++){ inv[i] = (MOD - MOD / i) * 1ll * inv[MOD % i] % MOD; } F[0] = Finv[0] = 1; for(int i = 1; i < N; i ++){ F[i] = F[i-1] * 1ll * i % MOD; Finv[i] = Finv[i-1] * 1ll * inv[i] % MOD; }}int comb(int n, int m){//comb(n, m)就是C(n, m) if(m < 0 || m > n) return 0; return F[n] * 1ll * Finv[n - m] % MOD * Finv[m] % MOD;}int main(){ init();}
1 0
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- jquery sortable组件配置参数中文注释及demo
- 关于mybatis中动态修改sql 的问题处理
- [NOI][CODEVS]1540 银河英雄传说 2002年NOI全国竞赛 并查集
- Python3网络爬虫(二):使用Beautiful Soup爬取小说
- 301UVA地铁运输
- 组合数
- 搭建本地SVN Repository
- 剑指offer-52.正则表达式匹配
- 用函数方法实现list的倒序输出
- CHttpFile 设置cookie总是失败的疑问的处理
- typeneme的双重意义!
- 本地计算机无法启动Apache故障处理
- (6)hadoop学习——hive的文件存储和基本数据类型
- 皇城PK--循环的简单运用