基本计数原理
加法原理
解决一件事情,有k类方法,第i类方法有a[i]种选择。那么总方案数=a[1]+a[2]+....+a[k]
乘法原理
解决一件事情,有k个步骤,第i个步骤有a[i]种选择。那么总方案数=a[1] * a[2]....* a[k]
排列组合
排列:
将n个元素选取k个出来构成一个排列,总方案数
组合:
将n个元素选取k个出来构成一个集合总方案数
多重集的排列与组合数
多重集的排列是指有k种元素,第i种元素的个数为a[i],总元素个数为n,其全排列的方案数为:
多重集的组合数1:
设有k种元素,第i种元素的个数为a[i],取共计r个元素构成集合且r<=a[i],其组合数:
证明:
考虑隔板法,因为每种元素都可以不选,考虑先给每种元素都选一个,那么也就是选r+k个,隔板法r+k-1个空隙,放k-1个隔板,那么每份隔出的数量-1对应选择该种元素的个数。因为r<=a[i],所以无论隔出的情况如何都不存在出现一种元素选取个数大于其总个数的情况
组合数的常用性质
性质1:
性质2:
性质3:
从动态规划的想法出发很好理解:
写代码的话初始状态设
从另一种角度看,它就是杨辉三角
这里不得不提一个很重要的东西:二项式定理
二项式定理
所以杨辉三角的元素其实就是二项式定理展开后的系数
这里写一个最简单的证法:
可以把
组合数的计算方法
方法1:
利用杨辉三角进行计算,时间复杂度O(n * m)
方法2:
利用定义式计算,要将除以阶乘的部分用乘法逆元处理,时间复杂度O(n)
ps:该方法要求k!和(n-k)!均与模数p互质
乘法逆元
定义:对于正整数a,p,若a与p互质,那么
由此可得
而求乘法逆元可以用费马小定理
费马小定理
对于正整数a,p,p为质数,且a与p互质,那么
于是一凑:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理