组合数学<1>——组合数学基础

news2025/2/24 16:27:09

今天我们聊聊组合数学。(本期是给刚刚学习组合数学的同学看的,dalao们可以自行忽略)

建议:不会求逆元的出门左转数论<2>,不会数论的出门右转数论<1>。

加乘原理

加乘原理小学奥数就有。

总的来说:加法原理:分类;乘法原理:分步

比如说,我问你有3条裤子2件衣服,只买一个,有几种可能性?3+2对吧。

那还是3条裤子2件衣服,每个买一个,有几种?3*2对吧。

排列组合

排列组合也是小学奥数的东西。

举个栗子,n个学生,选m个出来排队,有几种方案?A(n,m)

稍微解释一下A(n,m)=n\times (n-1)\times (n-2)\times (n-m+1)......=\frac{n!}{(n-m)!}

那还是刚刚的问题,但是不考虑排队的顺序,有几种方案?C(n,m)

由于不考虑方案,所以要在A(n,m)的基础上除m!,也就是C(n,m)=\frac{n!}{m!(n-m)!}

圆排列

有N个人围成一个圈,圈可以顺时针旋转,问有多少种方案?

其实很简单。不考虑圈是n!,考虑了是(n-1)!,也就是除掉一个N。

隔板法

原型:x_1+x_2+......+x_n=m\: (x_i>1),问有多少种方案。

x_i旁边放隔板,有n-1个隔板,所以答案是C(m-1,n-1)

变形1:x_1+x_2+......+x_n=mx_i可以是0,问方案数。

把每个x_i加1,也就是(x_1+1)+(x_2+1)+......+(x_n+1)=m+n\: (x_i\geq 1)

答案是C(m+n-1,n-1)

变形2:1\leq x_1< x_2 <...... <x_n\leq m,求方案数。

(x_1-1+1)+(x_2-x_1)+......(x_n-x_{n-1}+1)=m+1,答案为C(m,n)!!!

变形3:A_1\times A_2\times A_3\times ......A_N=M,求方案数。

我们知道,M=p_1^{\alpha_1}+p_2^{\alpha_2}+......+p_k^{\alpha_k},而每个A_i的分解质因数都在M里,就得到

\beta_{1,1}+\beta_{1,2}+......+\beta_{1,N}=\alpha_1,然后就转化为原型。(\beta是每个数的指数)

-----------------------------------------↑数学-------↓实现-----------------------------------------

求组合数

首先可以想到的是根据定义操作。

int C(int n,int m){
	int res=1;
	for(int i=m-n+1;i<=m;i++)
		res=res*i/(i-m+n);
	return res;
}

我这里稍微优化了一下,边乘边除,防止溢出。

取模组合数

有的题ans太大了,需要大家取模。但是在数论<2>中我们说过,这除法有鬼啊,模不了,不能只

接求,那怎么办呢?

杨辉三角递推

观察杨辉三角,你会发现,杨辉三角的(i,j)就是C(i,j)的值。(竖过来看)

而且,还满足C(i,j)=C(i-1,j-1)+C(i-1,j),因此就可以\Theta (n^2)求组合数了。

而且这是加法,很好模。当然,它只适用于nm较小的情况。

逆元

或许大家有疑问,我们能不能搞个前缀积,然后C(n,m)=prod(n)/prod(m)/prod(n-m)

还搞什么杨辉三角呢?有道理,但是我们知道,除法并不支持模运算(⊙︿⊙)

所以,我们可以用逆元。逆元怎么求在数论<2>中说过,这里不再赘述。

然后,根据上面的式子就可以求逆元啦!

long long factorial[maxn],invf[maxn];
long long exgcd(long long a,long long b,long long &x,long long &y){
	if(b==0){
		x=1;
		y=0;
		return a;
	}
	long long res=exgcd(b,a%b,x,y);
	long long tmp=x;
	x=y;
	y=tmp-a/b*y;
	return res;
}
long long inverse(long long n,long long mod){
	long long x,y;
	long long _=exgcd(n,mod,x,y);
	x%=mod;
	if(x<0)
		x+=mod;
	return x;
}
void precompute(){
	factorial[0]=1;
	for(int i=1;i<=maxn;i++)
		factorial[i]=factorial[i-1]*i%P;
	invf[maxn]=inverse(factorial[maxn],P);
	for(int i=maxn-1;i>=0;i--)
		invf[i]=invf[i+1]*(i+1)%P;
}
long long C(int n,int m){
	long long res=factorial[n];
	res=res*invf[n-m]%P;
	res=res*invf[m]%P;
	return res;
}

都开了long long,因为组合数学题的范围一般很大。

例题

CF630F:

很easy,C(n,5)+C(n,6)+C(n,7)就搞定了。边乘边除即可。

CF1081C:

有n块砖,切k刀,即C(n-1,k),由于颜色不确定,要再乘上(m-1)^k

由于nk较小,用杨辉三角求组合数即可。

CF630I:

很简单。答案是:4 \times 2\times 3\times 4^{n-3}+(n-3)\times 9\times 4^{n-4}

CF1433E:

圆排列板题。答案是2\frac{(n-1)!}{n}

CF1236B:

答案是n^{2^m-1}

ok,以上就是本期的全部内容了,我们下期再见!_(:з」∠)_

小贴士:大部分组合数学题目不是板题,大家应该灵活一些,先分类,再分步,定序去重。

当然,你也可以每道题都用高精度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1585926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OJ 【难度1】【Python】完美字符串 扫雷 A-B数对 赛前准备 【C】精密计时

完美字符串 题目描述 你可能见过下面这一句英文&#xff1a; "The quick brown fox jumps over the lazy dog." 短短的一句话就包含了所有 2626 个英文字母&#xff01;因此这句话广泛地用于字体效果的展示。更短的还有&#xff1a; "The five boxing wizards…

【我的小工具】生成React页面类

有了数据表的结构信息&#xff0c;就能生成React 的页面类&#xff0c;快捷方便。 生成界面如下&#xff1a; 生成的React FrmUser.js页面如下&#xff1a; 只需再写里面的操作逻辑代码。

存储革新:下一代低功耗PCM相变存储器

引言 由于Optane&#xff08;实质为PCM相变存储器&#xff09;被intel放弃以后&#xff0c;小编一直在关注业内有关SCM存储级内存&#xff08;PCM、ReRAM等&#xff09;相关的研究进展。比如之前发布的内容&#xff0c;供存储随笔的读者参考&#xff01; 字节跳动入局存储内存…

如何应用电桥电路的原理?

电桥电路是一种常用的测量技术&#xff0c;它利用了四个电阻的网络来检测电路的平衡状态。在平衡状态下&#xff0c;电桥的输出电压为零&#xff0c;这种特性使得电桥电路非常适合于精确测量电阻、电感、电容等电气参数&#xff0c;以及用于传感器和测量设备中。以下是电桥电路…

第十二届蓝桥杯真题做题笔记

2、卡片 笔记&#xff1a; 直接巧用排列组合求解即可&#xff1a; 我们通过对样例说明进行分析可知&#xff1a;想要分给n个小孩&#xff0c;那么我们就需要满足C(K, 2) K > n才能满足。 #include<bits/stdc.h> using namespace std;int com(int up, int down){i…

从文字到思维:呆马GPT在人工智能领域的创新之旅

引言 生成式预训练变换器&#xff08;Generative Pre-trained Transformer&#xff0c;简称GPT&#xff09;领域是人工智能技术中的一大革新。自OpenAI推出第一代GPT以来&#xff0c;该技术经历了多代发展&#xff0c;不断提升模型的规模、复杂度和智能化程度。GPT模型通过在大…

AI大模型日报#0411:国内首款音乐大模型、面壁智能数亿融资、MyScale AI开源

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 ​标题: 大模型做时序预测也很强&#xff01;华人团队激活LLM新能力&#xff0c;超越一众传统模型实现SOTA 摘要: 大语言模型通过新提…

从零开始学Spring Boot系列-集成MyBatis-Plus

在Spring Boot应用开发中&#xff0c;MyBatis-Plus是一个强大且易于使用的MyBatis增强工具&#xff0c;它提供了很多实用的功能&#xff0c;如代码生成器、条件构造器、分页插件等&#xff0c;极大地简化了MyBatis的使用和配置。本篇文章将指导大家如何在Spring Boot项目中集成…

git学习 1

打开自己想要存放git仓库的文件夹&#xff0c;右键打开git bush&#xff0c;用git init命令建立仓库 用 ls -a(表示全都要看&#xff0c;包括隐藏的)可以看到git仓库 也可以用 git clone 接github链接&#xff08;点code选项里面会给链接&#xff0c;结尾是git的那个&#xf…

如何用Java后端处理JS.XHR请求

Touching searching engine destroies dream to utilize php in tomcat vector.The brave isn’t knocked down&#xff0c;turn its path to java back-end. Java Servlet Bible schematic of interaction between JS front-end and Java back-end Question 如何利用Java…

自动驾驶定位算法-粒子滤波(Particle Filter)

自动驾驶定位算法-粒子滤波(Particle Filter) 自动驾驶对定位的精度的要求在厘米级的&#xff0c;如何实现厘米级的高精度定位呢&#xff1f;一种众所周知的定位方法是利用全球定位系统(GPS)&#xff0c;利用多颗卫星的测量结果&#xff0c;通过三角测量(Triangulation)机制确…

【Web】NSSRound#1-20 Basic 刷题记录(全)

目录 [NSSRound#1 Basic]basic_check [NSSRound#1 Basic]sql_by_sql [NSSCTF 2nd]php签到 [NSSCTF 2nd]MyBox [NSSCTF 2nd]MyBox(revenge) [NSSCTF 2nd]MyHurricane [NSSCTF 2nd]MyJs [NSSRound#3 Team]This1sMysql [NSSRound#3 Team]path_by_path [NSSRound#…

vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例(Ⅱ)搜索及数据获取配置项

搜索及数据获取配置项 搜索及数据获取配置项属性&#xff1a; noSearchModel&#xff08;无表单搜索标识&#xff09;属性&#xff1a;changeToSearch&#xff08;表单change事件是否触发搜索 &#xff09;属性&#xff1a; changeParams&#xff08;参数预处理【可异步】 &…

游戏行业科普 (二)游戏是怎么做出来,怎么卖出去的?

游戏行业科普系列文章&#xff0c;大家可以关注起来&#xff0c;等我慢慢芬分享~~ 《蛋仔派对》 一、研运流程--游戏是怎么做出来的 一款游戏的开发和运营大体上可以分为预研立项、设计开发、测试调优、发行上线和成熟运营几个阶段。 1&#xff09;预研立项&#xff1a; 初始研…

Lumos学习王佩丰Excel第二讲:单元格格式设置

今天学会GIF录制了&#xff0c;分享知识会更简便一些&#xff0c;话不多说&#xff0c;开始吧~ 一、美化表格 1、设置单元格格式的路径 从菜单栏进入&#xff1a; 选中区域&#xff08;单元格&#xff09;- 右键“设置单元格格式”&#xff1a; 2、合并单元格 合并一行 批量…

SpringCloudAlibaba之nacos的服务注册与发现

Nacos的服务注册与发现 照例放个妹子 本章节讲解nacos的服务注册与发现的简单使用 如图所示&#xff1a;按照图示搭建一个nacos作为服务注册中心的简单应用 创建provider服务提供者 创建nacos-discovery-provider模块引入依赖 <dependencies><dependency><…

【vue-qrcode + html2canvas】前端二维码生成与下载

一、前言 其实一开始搜的时候&#xff0c;很多还都是推荐的 vue-qrcode&#xff0c;于是就先用这个&#xff0c;但是发现想要在二维码中间放一个自定义的image的时候&#xff0c;这个库有点麻烦&#xff0c;需要自己将 image 图片盖在二维码上面&#xff08;官方教程也是如此&…

从0到1实现RPC | 09 故障隔离与恢复

一、应用场景 故障隔离解决的是&#xff1a;当服务提供者provider出现异常时&#xff0c;消费者consumer就不再调用异常实例&#xff0c;而是选择好的实例&#xff0c;避免频繁出错。 故障恢复解决的是&#xff1a;一段时间过后&#xff0c;服务提供者provider可以正常提供服…

AWS游戏全球智能翻译,助力企业出海

随着全球数字化时代的到来&#xff0c;游戏行业已经成为跨越国界、语言和文化的强大力量。然而&#xff0c;要将游戏产品成功推向全球市场并确保用户体验的流畅与愉悦&#xff0c;语言障碍却是一道不可忽视的挑战。在这个多元化的世界中&#xff0c;如何解决语言障碍&#xff0…

openGauss学习笔记-260 openGauss性能调优-使用Plan Hint进行调优-同层参数化路径的Hint

文章目录 openGauss学习笔记-260 openGauss性能调优-使用Plan Hint进行调优-同层参数化路径的Hint260.1 功能描述260.2 语法格式260.3 示例 openGauss学习笔记-260 openGauss性能调优-使用Plan Hint进行调优-同层参数化路径的Hint 260.1 功能描述 通过predpush_same_level Hi…