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

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

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

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

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

相关文章

test4121

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

<Windows>【建议收藏】《Windows笔记本设置WIFI热点后经常自行断开如何解决?》

第一步&#xff1a;输入Win键x&#xff0c;打开设置 第二步&#xff1a;选择高级网络设置 第三步&#xff1a;点击下拉按钮选择编辑 第四步&#xff1a;选择配置 第五步&#xff1a;电源管理中取消勾选

取数游戏(dfs)

前言&#xff1a; 该题取自洛谷P1123&#xff0c;题主用的dfs&#xff08;深度优先搜索&#xff09; 题目描述&#xff1a; 数据范围&#xff1a; 思路&#xff1a; 思路见代码&#xff0c;注释的很清晰嗷 AC代码&#xff1a; #include <iostream> #include <alg…

Ubuntu系统使用Docker本地部署Android模拟器并实现公网访问

文章目录 1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Ubuntu系统使用Docker部署docker-android安卓模拟器&#xff0c;并结合cpolar内网穿透工具实现公网远程访问本地…

【绩效管理】建立员工绩效考核机制,提升企业绩效管理水平

随着企业的迅猛发展&#xff0c;其内部管理问题日益突出&#xff0c;已经制约了企业的进一步发展。一方面&#xff0c;员工工作懒散、积极性不高&#xff0c;出错的次数也逐步上升&#xff0c;另一方面&#xff0c;管理者也无法有效评价员工的工作好坏。面对这些问题&#xff0…

Pillow教程11:九宫格切图的实现方法(安排!!!)

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

java混淆的重要性分析

Java代码混淆是一种常用的安全技术&#xff0c;它通过对Java代码进行变换和重命名&#xff0c;使得源代码变得难以理解和逆向工程&#xff0c;从而增强代码的安全性。以下是对Java混淆重要性的分析&#xff1a; 保护知识产权&#xff1a;Java混淆可以防止恶意用户或竞争对手轻易…

C++中const关键字的多种用法

在C中&#xff0c;const 是一个关键字&#xff0c;用于声明常量。它可以用于多种情况&#xff0c;包括声明常量变量、常量指针、以及成员函数中的常量性。 1.常量变量 通过在变量声明前加上 const 关键字&#xff0c;可以创建一个不可修改的常量。 例如&#xff1a; const i…

如何解决mysql死锁问题

为什么会产生死锁 Innodb 引擎为了解决「可重复读」隔离级别下的幻读问题&#xff0c;就引出了 next-key 锁。它是记录锁和间隙锁的组合。 Record Lock&#xff0c;记录锁&#xff0c;锁的是记录本身&#xff1b; Gap Lock&#xff0c;间隙锁&#xff0c;锁的就是两个值之间的…

Vue笔记 2

数据代理 数据代理&#xff1a;通过一个对象代理对另一个对象中属性的操作&#xff08;读/写&#xff09; let obj{x:100} let obj2{y:200} Object.defineProperty(obj2,x,{get(){return obj.x},set(value){obj.x value} })Vue中的数据代理 Vue中的数据代理&#xff1a; 通…

【算法】环形链表 - 遍历/双指针

题目 给定一个链表&#xff0c;判断链表中是否有环&#xff0c;并返回结果。 原理 遍历 声明一个Set&#xff0c;遍历链表放入Set&#xff0c;如果放入失败&#xff0c;说明有环。 双指针 声明一个快指针和一个慢指针&#xff0c;快指针每次移动两步&#xff0c;慢指针移…

MySQL学习笔记(三)

1、insert插入多条数据 语法&#xff1a;insert into t_user(字段名1,字段名2...) values(值1,值2...),(值1,值2...),(值1,值2...)...; 2、快速创建表 原理&#xff1a;将一个查询结果当做一张表创建&#xff0c;可以完成表的快速复制。表创建出来&#xff0c;同时表中的数据…

【计算机毕业设计】——农产品销售系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

✔ ★Java项目——设计一个消息队列(二)

Java项目——设计一个消息队列 四. 项⽬创建五. 创建核⼼类创建 Exchange&#xff08;名字、类型、持久化&#xff09;创建 MSGQueue&#xff08;名字、持久化、独占标识&#xff09;创建 Binding&#xff08;交换机名字、队列名字、bindingKey用于与routingKey匹配&#xff09…

LLMs之ToolAlpaca:ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略

LLMs之ToolAlpaca&#xff1a;ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略 目录 ToolAlpaca的简介 0、《ToolAlpaca: Generalized Tool Learning for Language Models with 3000 Simulated Cases》翻译与解读 1、数据集列表 2…

前端代码规范 - 图片相关

本文是前端代码规范系列文章&#xff0c;将涵盖前端领域各方面规范整理&#xff0c;其他完整文章可前往主页查阅~ 在前端项目中&#xff0c;图片资源是构成网站视觉效果的重要元素。合理的图片使用规范不仅可以提高页面加载速度&#xff0c;还可以增强用户体验。本文将详细介绍…

基于arcgis /envi PCA(主成分分析)实现过程

基于arcgis /envi PCA(主成分分析)实现过程 1 提取研究范围 2对研究范围进行重采样 &#xff08;根据数据情况进行选做&#xff0c;如数据较大建议进行该步骤操作&#xff09; 3 对研究范围内数据进行归一化处理 4 将空值替换为0 5 对同期不同要素数据进行波段合成 对波段…

易备数据备份软件案例:昆山某电子元器件制造企业灾备方案

昆山某电子有限公司专注于生产和销售高品质的电子元器件&#xff0c;包括各种电容器、电感线圈、电阻器、二极管、晶体管等。产品广泛应用于各种电子设备和行业&#xff0c;包括&#xff1a;消费电子、通信设备、工业控制、汽车电子、航空航天、医疗器械等。 随着公司生产经营…

Yii2 路由美化访问需要加s

不得不说yii真是反人类&#xff0c;怪不得现在都不维护了&#xff0c;今天解析下路由美化下的路由访问问题。 设置main.php配置文件 urlManager > [enablePrettyUrl > true, // 启用 URL美化showScriptName > false, // 隐藏入口文件index.phpenableStrictParsing…

MySql数据库从0-1学习-第三天多表设计学习

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一)多对多一对一 一对多 需求:根据需求,完成部门和员工表的设计 一对多,很多人会使用外键,…