本文为上课的学习笔记
1.排列&组合
组合,从个元素中选个,不及顺序
方案数:
排列,从个元素中,选个,考虑顺序
方案数:
2.组合数性质
很显然,从个元素中选个,和选个不要是一样的
一个很重要的性质,一般可以在都不大的时候做递推来预处理
现在已经知道了有个元素的情况,考虑第个元素
如果选它,则前的元素中只能选个,所以方案数为
如果不选它,则前的元素中要选个,所以方案数为
根据加法原理,相加即可
根据上面那个式子,我们可以把拆成
然后,保留,将继续按同样的方法拆
最后一次拆就是:
然后,就不用拆了
等式左边意义是从个元素中选个的方案和,则为从个元素中选任意个的方案和
即为个元素的子集个数
简单说,就是从个元素中选偶数个的方案数和和选奇数个的方案数和相等
这个东西可以从杨辉三角上考虑
众所周知,杨辉三角的每一位等于它的左上方的数加上它右上方的数
那么取每一行的奇数位或偶数位(即从左到右数是第奇数/偶数个),都可以表示为它上一行所有数的和的形式
可以自己画一个体会体会,太懒所以不画在这了
和第三个式子证法有些相似相信你们已经忘了第三个式子是哪个式子
还是一项一项拆开
保留,继续拆为
然后再拆后面那项
一直拆到
当然,,所以得证
二项式展开,比较重要,可以看出它也对应了杨辉三角
不过想严格证明好像挺难
假设现在有个球,等式右边就是选个的方案数
考虑将他们分成两组,每组个,那么共选个的方案数也可以表示为:
第一组选个,第二组选个,加上第一组选个,第二组选个.....即第一组选个,第二组选个
即为
吸收公式:
直接用定义展开即可
从 中选 个数,最大数为 的方案数为
左边:从 个里面选 个,再在这 个里选 个
右边:直接从 个里面选 个,然后在从剩下的 个里选左边的描述里第二次选淘汰掉的 个
和下降幂相关联:
仍然是拆成阶乘消一消
3.算组合数
这还用算?直接暴力枚举就行(bushi
3.1递推
复杂度
直接用之前推的第二个性质,一边加一边取模
3.2约分
适用于较小,较大
对于模数是质数,可以直接逆元
如果不是,对分数上下分别分解质因数来做除法,然后快速幂合并
3.3Lucas
适用于较大,为小质数
关于它的证明和使用看这里
3.4exLucas
不过和Lucas关系好像并不大
适用于较大,较小但不保证是质数
具体写起来还是挺复杂挺难的,也可能是我太蒻
具体看这里
花了好长时间才搞懂,然后写代码又写了一晚上+一早上......我太蒻了
4看点题
4.1P4369
把拆成个不同组合数之和
很傻的一个题,前个写为一些元素选0个,每个都是1
最后一个写成个元素选一个
然后就没了
4.2P4370
用到一种神奇的取方法快速比较两个组合数大小
具体看题解
4.3P3746
并没有做出了,待更
做出来了,懒得更
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?