求组合数的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< ...
最新文章
- MT8870DTMF解码器测试
- jQuery Layer 弹层组件
- Redmi 卢伟冰:要做就做真旗舰 绝不通过简配压低成本
- python oop编程_23 Python - 面向对象编程OOP
- oracle和sqlserver数据库直接生成xml
- matlab 实现批量修改文件后缀名 案例
- eclipse换炫酷主题
- PDF不小心删掉了怎么恢复?4个方法隔壁家老王已经恢复了
- matlab实现隐函数求偏导数(impldiff函数)
- Googgle guava ImmutableCollections
- 德国人的数学题375=1
- 什么是视频监控平台的平台对接
- HTML5学习第6篇—video:自己实现video的播放控件(添加样式版)
- spring boot 2.0 配置logback日志
- 解决ubuntu下微信不能发图片的问题。
- 深度学习机器人交易_使用深度学习创建股票交易机器人
- SIMULIA-达索系统一体化仿真解决方案
- Win8 纯净版安装详细教程
- 云台山茶旅集团各分子版块日新月(2月20日)
- STM32F1案例 ST7735 TFT液晶显示屏综合库使用
热门文章
- micropython socket_Micropython之HTTP-GET方法2
- 继承复习-发均分红包案例
- numpy学习笔记(莫烦python)
- JavaSE(十九)——equals() 和 == 的区别
- Labview 2017安装教程
- 命令行参数实现10万行小字典程序并输出查找时间
- android air创建文件夹,安卓版Airdrop将上线:无需安装APP,轻松实现文件隔空投送...
- Win7下运行VC程序UAC权限问题
- 深入解析windows XP/2003:内核模式和用户模式
- 关于计算机和人物的英语短文,人脑和电脑英语作文