首页 > 编程语言 >【算法】组合数学初步

【算法】组合数学初步

时间:2023-08-06 23:00:23浏览次数:40  
标签:方案 dbinom 组合 小球 算法 逆元 数学 dp

参考资料

OI-Wiki 组合数学

一、 概念

\(\dbinom{n}{m}\) 表示从 \(n\) 个小球内拿 \(m\) 个的方案数,小球一样但顺序不一样算同一种方案,可用 \(\dbinom{n}{m}=\frac{n!}{m!(n-m)!}\) 计算,称为组合。

\(A_n^m\) 表示从 \(n\) 个小球内拿 \(m\) 个的方案数,小球一样但顺序不一样算不同方案,\(A_n^m=\frac{n!}{(n-m)!}\)称为排列。

二、 实现

1. 递推

可以用 dp 的方式理解这种处理方式,令 dp[i][j] 表示前 \(i\) 个球里拿 \(j\) 个的方案数,那么对于当前这个球,不拿的方案数是 dp[i-1][j],拿的方案数是 dp[i-1][j-1]。这样得出递推式 dp[i][j]=dp[i-1][j]+dp[i-1][j-1]

2. 阶乘逆元

根据组合数的求法直接用 \(m!\) 的逆元乘上 \((n-m)\) 的逆元再乘上 \(n!\) 即可。

3. Lucas 定理

当模数不是质数时便可以考虑 Lucas 定理,

\(\dbinom{n}{m}=\dbinom{n\bmod p}{m\bmod p}\times\dbinom{n/p}{m/p}\)

三、其他

1. 二项式定理

\((a+b)^n=\sum\limits_{i=0}^n\dbinom{n}{i}a^{n-i}b^i\)

2. 插板法

典型应用有错排问题等,在推一些组合数学问题结论上比较好用,个人认为 OI-Wiki 上已经讲的十分清楚了,推荐去那学习。有时间再补吧(

标签:方案,dbinom,组合,小球,算法,逆元,数学,dp
From: https://www.cnblogs.com/Arcka/p/17610288.html

相关文章

  • 【算法】网络流初步
    参考资料用最通俗的语言让你学会网络流OI-Wiki网络流算法学习笔记(28):网络流一、概念网络流指的是在一个每条边都有容量的有向图中找到一种方案,使得源点到汇点的流量最大。网络流问题常见的有三类,分别是最大流,费用流和最小割。最大流顾名思义,表示的是在有向图中找到一种......
  • 扩展欧几里得算法与乘法逆元
    Part1:前置知识欧几里得算法\[\foralla,b\in\mathbb{N},\gcd(a,b)=\gcd(b,a\bmodb)\]\(\mathrm{Bézout}\)定理对于任意整数\(a,b\),存在一对整数\(x,y\),满足\(ax+by=\gcd(a,b)\)证明:在欧几里得算法的最后一步,即\(b=0\)时,显然有一对整数\(x=1,y=0\),使得\(a......
  • Dijkstra最短路径算法及其优化
    Dijkstra最短路径算法及其优化图示过程可以参考图文详解Dijkstra最短路径算法(freecodecamp.org)直接给出Java版本的普通实现方式:/***最普通的实现形式,时间复杂度是O(n2),空间复杂度是O(n)*@paramweight*@paramstart*@return*/publicstaticint[]getDij......
  • 【学习笔记】类欧几里得算法
    概述主要是求以下三个式子:\[f(a,b,c,n)=\sum_{i=0}^n\left\lfloor\dfrac{ai+b}{c}\right\rfloor\]\[g(a,b,c,n)=\sum_{i=0}^ni\left\lfloor\dfrac{ai+b}{c}\right\rfloor\]\[h(a,b,c,n)=\sum_{i=0}^n\left\lfloor\dfrac{ai+b}{c}\right\rfloor^2\]求\(f......
  • 算法 华为
     1、链表,两两交换位置,不允许修改值,只能改节点例如1234,=>21432、拔河比赛选拔队员,输入身高,体重。按这两个优先级排序例如输入1827019060输出1906019060 3、最小花费问题(这个分值200,比前面的难)输入产品数量n,需要输出k种方案n个产品对应的价格数组输出:前k小......
  • CodeForces 数学类题目 做题汇总
    写一下\(3\)月\(28\)日起开始做的题目感受:1.CF1793BFedyaandArray:普及-*1100Luogu链接CF链接一道比较正宗的组合清新小题,可以对本题进行数学上的加强。ACCode2.CF1774BColoring:普及/提高-*1500Luogu链接CF链接一道需要考虑全面的贪心小题目ACCode......
  • 数据结构与算法(四):双向链表
    基本概念双向链表概念和单向链表是一致的,区别在于双向链表在单向链表的基础上,指针区域多了一个指向上一个节点的指针。单向链表内容可以参考我的上一篇文章:http://t.csdn.cn/Iu56H。基本的数据结构如图所示:链表结构双向链表结构包含了节点的数据内容和两个指针:指向前一个节点......
  • m基于FFT傅里叶变换的QPSK基带信号频偏估计和补偿算法FPGA实现,包含testbench和matlab
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,并使用matlab2022a对结果进行星座图的显示:将FPGA的频偏基带QPSK信号和频偏补偿后的QPSK基带信号使用matlab显示星座图,结果如下:2.算法涉及理论知识概要QPSK(QuadraturePhaseShiftKeying)是一种常用的调制方式,它可以在相位和......
  • m基于FFT傅里叶变换的QPSK基带信号频偏估计和补偿算法FPGA实现,包含testbench和matlab
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,并使用matlab2022a对结果进行星座图的显示:   将FPGA的频偏基带QPSK信号和频偏补偿后的QPSK基带信号使用matlab显示星座图,结果如下:   2.算法涉及理论知识概要       QPSK(QuadraturePhaseShiftKeying)......
  • 基于位相光栅的四波横向剪切干涉法波前检测算法的matlab仿真
    1.算法理论概述      波前检测技术是现代光学中的重要技术之一,可以用于衡量光学系统的成像质量和研究光学系统的异常现象。随着现代光学技术的不断发展,波前检测技术也在不断地发展和完善。其中,基于位相光栅的四波横向剪切干涉法波前检测算法是一种常用的波前检测算法,本文......