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

今天我们聊聊组合数学。(本期是给刚刚学习组合数学的同学看的,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,以上就是本期的全部内容了,我们下期再见!_(:з」∠)_

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

景芯2.5GHz A72训练营dummy添加(一)

景芯A72做完布局布线之后导出GDS&#xff0c;然后进行GDS merge&#xff0c;然后用Calibre对Layout添加Dummy。在28nm以及之前的工艺中&#xff0c;Dummy metal对Timing的影响不是很大&#xff0c;当然Star RC也提供了相应的解决方案&#xff0c;可以考虑Dummy metal来抽取RC。…

【Vector-Map-路径规划(0)】卷首语

因为城市NOA 的开发过程中&#xff0c;十字路口这类场景非常不好处理&#xff0c;个人对路径规划没有什么基础&#xff0c;只知道深度优先&#xff0c;广度优先&#xff0c;A*&#xff0c;Dijkstra等算法&#xff0c;不知道在矢量地图中如何使用&#xff1f;因此花几天时间读几…

【LangChain系列】2. 一文全览LangChain数据连接模块:从文档加载到向量检索RAG,理论+实战+细节

本文学习 LangChain 中的 数据连接&#xff08;Retrieval&#xff09; 模块。该模块提供文档加载、切分&#xff0c;向量存储、检索等操作的封装。最后&#xff0c;结合RAG基本流程&#xff0c;我们将利用LangChain实现RAG的基本流程。 0. 模块介绍 在前面文章中我们已经讲了…

ssm042在线云音乐系统的设计与实现+jsp

在线云音乐系统的设计与实现 摘 要 随着移动互联网时代的发展&#xff0c;网络的使用越来越普及&#xff0c;用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行&#xff0c;人们在日常生活中经…

MySQL 连接查询

目录 连接查询 命令格式&#xff1a; 内连接&#xff1a; 等值连接&#xff1a; 格式&#xff1a; 非等值连接&#xff1a; 格式&#xff1a; 外连接&#xff1a; 左连接&#xff1a; 格式: 结果&#xff1a; 右连接&#xff1a; 格式: 结果&#xff1a; 全外连…

D-LinkNAS 远程命令执行漏洞(CVE-2024-3273)RCE漏

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 D-LinkNAS是由D-Link公司制造的网络附加存储设备。…

01 SQL基础 -- 初识数据库与安装

一、初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database, DB)。用来管理数据库的计算机系统称为数据库管理系统(Database Management System, DBMS) 1.1 DBMS 的种类 DBMS 主要通过数据的保存格式…

公众号答疑集锦(4月)之IE,二维声纳,hypack处理内河多波束

1、Inertial Explorer这款软件怎么导出txt或csv格式的轨迹文件&#xff1f; 答&#xff1a;https://mp.weixin.qq.com/s/Rtl_3YJjDQblyVPLXjAmhA。 问&#xff1a;软件需要一个EGM96-World.wpg格式的文件&#xff0c;就是IE这家公司特有的文件格式。我登录他们官网&#xff0…

JAVAEE之Spring AOP

1. AOP概述 AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC) 1.1 什么是AOP&#xff1f; • Aspect Oriented Programming&#xff08;⾯向切⾯编程&#xff09; 什么是⾯向切⾯编程呢? 切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程. 什么是⾯向特定⽅法编…

OpenHarmony南向开发-Docker编译环境

Docker环境介绍 OpenHarmony为开发者提供了两种Docker环境&#xff0c;以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下&#xff1a; 独立Docker环境&#xff1a;适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。 基于HPM的Docker…

宏定义(超级详细)

宏定义在编程里面也有十分重要的作用&#xff0c;下面我就来详细介绍一下&#xff1a; 宏的特点 宏主要特点是它在预编译的时候就会被数字或者代码字符替换掉。这样可以将一些重复的变量替换掉&#xff0c;方便我们进行修改&#xff0c;只需要修改宏定义就行了。 宏的几大类…

《一》Qt的概述

1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组件编程。 1.2 Qt的发展史 1991年 Qt最早由芬兰奇趣科技开发 1996年 进入商业领域&#x…

2024年mathorcup(妈妈杯)数学建模C题思路-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图 ’ 是一个简化的物流 网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同 流向进行分拣并发往下一个场地&#xff0c;最终使包裹…

matlab conv2

MATLAB卷积conv、conv2、convn详解-CSDN博客

全面学习SpringCloud框架指南

要深入学习Spring Cloud框架,你需要系统地掌握其核心组件和概念,并了解如何在实际项目中应用这些知识。以下是一些关键的学习点和相应的学习内容: 一共分为10个模块包括: 1、微服务架构基础: 理解微服务架构的概念和优势。 学习单体架构向微服务架构演进的过程。 掌握…

IE浏览器清理缓存工具

有些项目可能因为浏览器缓存导致使用异常&#xff0c;比如登陆异常。这里提供清除浏览器痕迹的工具&#xff0c;以IE浏览器为例&#xff0c;痕迹的默认存放位置为&#xff1a; C:\Users\Ro\AppData\Local\Microsoft\Windows\Temporary Internet Files 新建bat或者cmd批处理文件…

【LeetCode热题100】189. 轮转数组(数组)

一.题目要求 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 二.题目难度 中等 三.输入样例 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: …

【学习】企业做等保测评有何意义

等保测评是指对信息系统的安全性进行评估和保障的一种标准&#xff0c;其全称为“信息安全等级保护测评”。随着信息技术的不断发展和应用&#xff0c;信息安全问题越来越受到人们的关注。为了保障信息系统的安全&#xff0c;国家制定了一系列的安全等级保护标准&#xff0c;而…

【优选算法专栏】专题四:前缀和(二)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

gitee上传出现git did not exit cleanly (exit code 1)的错误

在最后push的时候出现下面的结果&#xff1a; 出现这个错误的原因有好多种&#xff0c;目前介绍博主遇到的两种&#xff1a; 在第一次进行push操作的时候&#xff0c;需要输入用户名和密码&#xff0c;如果输入错误&#xff0c;则最后可能会出现上述报错 解决方法&#xff1a;…