求组合数的O(n^2)和O(n)解法及模板
概率论中的组合数应该比较熟悉吧,在数论中组合数也具有重大意义,下面介绍组合数的解法:
方法一O(n^2):
利用公式(n,m)=(n-1,m-1)+(n-1,m):
模板:
#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)):
因为大部分题都有求余,所以我们大可利用逆元的原理(没求余的题目,其实你也可以把MOD自己开的大一点,这样一样可以用逆元做)。利用公式:
我们需要求阶乘和逆元阶乘。
模板:
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(); }
转载于:https://www.cnblogs.com/FrankChen831X/p/10665895.html
求组合数的O(n^2)和O(n)解法及模板相关推荐
- 算法刷题-数论-组合数、快速幂、逆元、递推求组合数、逆元求组合数
文章目录 acwing885. 求组合数 I(递推:数据范围:2000) acwing875. 快速幂(a的k次方 模 b) acwing876. 快速幂求逆元 acwing886. 求组合数 II( ...
- Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 【逆元求组合数 离散化】
任意门:http://codeforces.com/contest/689/problem/E E. Mike and Geometry Problem time limit per test 3 s ...
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- 1100: 求组合数(函数专题)
1100: 求组合数(函数专题) 时间限制: 1 Sec 内存限制: 128 MB 提交: 6264 解决: 4653 [提交] [状态] [讨论版] [命题人:admin] 题目描述 马上要举办新生 ...
- ZZULIOJ 1100: 求组合数(函数专题)
求组合数(函数专题) 题目描述 马上要举办新生程序设计竞赛了,与以往不同的是,本次比赛以班为单位,为了全面衡量一个班级的整体水平,要求从一个班的m位同学中任选k位同学代表本班参加比赛,问有多少种组合方 ...
- java实现n选m组合数_求组合数m_n
下面为求取组合数的代码: 1 #include #define MAX 10009 int prime[168]; void print(int *v, int length) { int i = 0 ...
- 求组合数(完善中.......)
1.杨辉三角递推法 void init_trangle() {for(int i = 0; i < 500; i ++){cc[i][0] = cc[i][i] = 1;for(int j = ...
- 求组合数(不同类型的组合数C++)
求组合数有许多种不同的算法,要根据不同的数据量大小选择不同的算法 类型1 给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cba mod(109+7)的值. 输入格式 第一行包含整数 n. ...
- 数学知识—不同数据范围求组合数,例题、思路、代码实现
求组合数1: 题目链接:885. 求组合数 I - AcWing题库 题面: 第一行包含整数 n. 接下来 n 行,每行包含一组 a 和 b. 1<=n<=10000 1<=b< ...
最新文章
- 我看UNIX与Windows的本质区别
- JQuery-学习笔记03【基础——DOM操作】
- 滴滴java开发面试题_Java开发经典面试题(十二)
- oracle19c的版本号_升级到 oracle 19c 的版本差异
- webApplicationContext 与servletContext
- SAS9.3安装经验
- 数据库系统概论-数据库编程与关系查询处理和查询优化
- cad隐藏图层命令快捷键_CAD中,有没有快速隐藏其他图层的快捷键啊? 新上
- js 实现简繁体互相转换(字符串)
- 跨页面的多选功能实现
- 什么是进程、线程、协程
- linux打开文件夹
- mac电脑安装nvm及使用的详细步骤
- 全球最大同性交友平台的“黑历史”
- 李兴华java开发实战经典-枚举
- 火鸟字幕合并器官方发布首页
- Windows App开发之使用通知与动态磁贴
- Windows本地认证和NTLM认证
- php访问参数错误,提示“无法访问参数错误”的4种解决方法
- 知乎万人点赞推荐的五款APP
热门文章
- 如何调试NativeSample
- DropDownList的常用属性和事件
- windowbuilder点击按钮出现新界面_MIUI 10 负一屏,新界面新体验
- 广度优先遍历二叉树(BFS)-C++实现
- 计算机网络工程实验分析与体会_《软件工程》面向对象分析实验
- ubuntu mysql 更新_数据库应用(三): Ubuntu 下 MySQL添加、更新与删除数据
- 不同制式字符串之间的转换
- php320,PHP_PHP正式版-320mp3下载站
- false shell 判断_Shell 流程控制
- web开发入门到深入-html5(2)