组合数学<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.rhkb.cn/news/306003.html

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

相关文章

中国网站数量竟然比2022年多了10000个

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 CNNIC发布了最新中国互联网报告&#xff0c;报告显示&#xff1a; 2018年中国有523万个网站&#xff0c;2023年13月下降到388万个&#xff0c;5年时间网站数量下降30%&#xff0c;但相比于2022年12月&#xff0c;竟…

ThinkPHP审计(1) 不安全的SQL注入PHP反序列化链子phar利用简单的CMS审计实例

ThinkPHP代码审计(1) 不安全的SQL注入&PHP反序列化链子phar利用&简单的CMS审计实例 文章目录 ThinkPHP代码审计(1) 不安全的SQL注入&PHP反序列化链子phar利用&简单的CMS审计实例一.Thinkphp5不安全的SQL写法二.Thinkphp3 SQL注入三.Thinkphp链5.1.x结合phar实现…

第6章 6.3.1 正则表达式的语法(MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 正则表达式可以由一般的字符、转义字符、元字符、限定符等元素组…

普通函数和箭头函数的区别

普通函数和箭头函数在JavaScript中主要有以下区别&#xff1a; 语法形式。箭头函数使用简洁的箭头语法>定义&#xff0c;不需要像普通函数那样使用function关键字。匿名性。箭头函数只能是匿名的&#xff0c;而普通函数可以是匿名的&#xff0c;也可以具有具体的名称。this…

【C++】1.从C语言转向C++

目录 一.对C的认识 二.C的关键字 三.命名空间 3.1命名空间的定义 3.2命名空间的使用 四.C的输入与输出 五.缺省参数 5.1全缺省参数 5.2半缺省参数 六.函数重载 七.引用 7.1引用的特性 7.2引用和指针的区别 八.内联函数 九.auto关键字&#xff08;C1…

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

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

openGauss_5.0.1 企业版安装及问题记录(CentOS系统):主备模式服务器安装

目录 &#x1f4da;第一章 官方地址&#x1f4d7;安装包下载地址&#x1f4d7;文档指南 &#x1f4da;第二章 安装&#x1f4d7;准备工作&#x1f4d7;开始安装&#x1f4d5;创建XML配置文件&#x1f4d5;初始化安装环境&#x1f4d5;执行安装&#x1f4d5;验证 &#x1f4da;第…

【算法刷题 | 回溯思想 01】4.11(回溯算法理论、组合、组合总和 ||| )

文章目录 回溯1.回溯算法理论基础1.1什么是回溯法&#xff1f;1.2回溯法的效率1.3回溯法解决的问题1.4如何理解回溯法&#xff1f;1.5回溯法模板 2.组合2.1问题2.2解法一&#xff1a;暴力解法&#xff08;循环次数不确定&#xff09;2.3解法二&#xff1a;回溯2.3.1回溯思路&am…

《web应用技术》第三次课后练习

实验目的&#xff1a; 1、springboot入门程序撰写并启动 2、使用postman练习参数的获取。 参考&#xff1a;Day04-10. Web入门-SpringBootWeb-快速入门_哔哩哔哩_bilibili

海外媒体发稿:新加坡 Asia One VS新加坡sg雅虎

海外媒体发稿&#xff1a;新加坡 Asia One VS新加坡sg雅虎 新加坡&#xff1a;雅虎 官网&#xff1a;sy.yahoo.com 官网&#xff1a;asiaone.com/lite 亚洲第一站。是 新加坡的新闻和生活方式网站和新闻聚合器。它是 新加坡第一个纯数字 内容平台&#xff0c;主要为新加坡、…

【C++学习】C++11新特性(第三节)——可变参数模板, lambda表达式与function包装器

文章目录 ♫文章前言♫一.可变参数模板♫1.什么是可变参数模板♫2.获取可变参数模板里参数包的方法♫3.可变参数模板在容器中的引用 ♫二. lambda表达式1. lambda表达式的由来♫2. lambda表达式♫1.lambda表达式语法♫2. 捕获列表说明 ♫3.函数对象与lambda表达式 ♫三.包装器♫…

智慧安防系统EasyCVR视频汇聚平台接入大华设备无法语音对讲的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流&#xff0c;视频画面1、4、9、16个可选&#xff0c;支持自定义视频轮播。EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标…

Python爬虫怎么挣钱?6个Python爬虫赚钱方式,搞搞副业不是问题

1.最典型的就是找爬虫外包活儿 网络爬虫最通常的的挣钱方式通过外包网站&#xff0c;做中小规模的爬虫项目&#xff0c;向甲方提供数据抓取&#xff0c;数据结构化&#xff0c;数据清洗等服务。新入行的程序员大多都会先尝试这个方向&#xff0c;直接靠技术手段挣钱&#xff0…

【数据库】GROUP BY 详解、示例、注意事项

一、基本介绍 GROUP BY 语句在 SQL 中用于将来自数据库表的记录分组&#xff0c;以便可以对每个组执行聚合函数&#xff08;如 COUNT(), MAX(), MIN(), SUM(), AVG() 等&#xff09;。使用 GROUP BY 时&#xff0c;数据库会根据一个或多个列的值将结果集分为多个分组&#xff…

【Linux学习】初识Linux指令(一)

文章目录 1.指令操作与图形化界面操作1.什么是指令操作&#xff0c;什么是图形化界面操作&#xff1f; 2.Linux下基本指令1.Linux下的复制粘贴2.Linux两个who命令3.补充知识4.pwd指令5. ls 指令6.cd 指令1.目录树2.相对路径与绝对路劲3.常用cd指令 7.tree指令8. touch指令9.sta…

产品经理常用UML图之「用例图」,附7张优质实例图!

用例图是产品经理应该会画的图之一&#xff0c;它是需求分析的产物&#xff0c;借助用例图&#xff0c;参与者以可视化的方式对问题进行探讨&#xff0c;能够减少大量沟通上的障碍。接下来&#xff0c;我们一起探讨和学习一下产品经理常用的UML用例图。 一、用例图简介 用例图…

数据可视化高级技术Echarts(折线图)

目录 一、什么是折线图 二、如何实现 1.基本折线图 2.如何变得平滑只需要定义&#xff1a; smooth 3.如何定义线条的样式 color&#xff1a;设置线的颜色 width&#xff1a;设置线宽 type&#xff1a;设置线的类型 4.如何定义节点样式 symbol symbolSize&#xff1a…

2024年【T电梯修理】考试总结及T电梯修理考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理考试总结考前必练&#xff01;安全生产模拟考试一点通每个月更新T电梯修理考试技巧题目及答案&#xff01;多做几遍&#xff0c;其实通过T电梯修理试题及解析很简单。 1、【多选题】修理工陶、陈&#xff0c…

在vue和 js 、ts 数据中使用 vue-i18n,切换语言环境时,标签文本实时变化

我的项目需要显示两种语言(中文和英文)&#xff0c;并且我想要切换语言时&#xff0c;页面语言环境会随之改变&#xff0c;目前发现&#xff0c;只能在vue中使用$t(‘’)的方式使用&#xff0c;但是这种方式只能在vue中使用&#xff0c;而我的菜单文件是定义在js中&#xff0c;…

neo4j使用详解(十六、集成Kerberos认证(Java/c#)——最全参考)

Neo4j系列导航&#xff1a; neo4j安装及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 neo4j索引及调优 1.简介 Kerberos是一种网络身份验证协议&#xff0c;它允许网络节点在网络上证明其身份。它通过使用密钥分发中…