最近在备战csp-s看到这一章,被本章中大量知识搞晕,身为一个高中生有绝大部分知识是不需要掌握的。现在我对这些知识这个总结。
排列与组合(我学这个的时候还没学到这些知识)
排列数
从n个不同元素中选取m个元素,按一定循序排列,有几种情况。
P/A(n,m)=n*(n-1)*...*(n-m+1)
组合数
从n个元素中选取m个元素,不光循序如何,有几种情况
C(n,m)=A(n,m)/m!=(n*(n-1)*...*(n-m+1))/m!
排列数和组合数最大的区别在于是否有序,比如我将用一到五,五个数字组成的三位数中123和321是不同的情况,此时用排列数,但我从一到五随机选三个数字此时123和321是同一种情况应该用组合数。这里讲个不把两个数搞混的方法,应为组合数一般会小与排列数所以它要/m。
常见计数方法
特殊优先
例:六人站成一排,求:
1.甲不在排头,乙不在排尾,有几种排列数
分类讨论,第一类乙在排尾,有A(5,5)种排法;第二类乙既不在排头,也不在排尾4*4*A(4,4)这个第二类之所以是这样是因为https://img-blog.csdnimg.cn/7d6d8a522fdd4d119fbd282e079c3470.jpeg,总结论数为A(5,5)+4*4*A(4,4) =504
2,甲不在排头,乙不在排尾,甲乙不相邻,有几种排列数。这题可以直接用上一题的结果减去甲乙相邻的情况4*4*A(3,3)。(画上一题的图可以解)或者用书上给的分类讨论,我自己认为直接减会更加简单(我不会说是我看不懂它的解法)
总结从上面两题看出当元素中某些元素有特殊要求,我们可以对其进行单独分析先确定它的位置再去确定,其它元素的位置,同时考虑它的位置对其它元素的影响(它占了别的元素就没位置了)
捆绑与插空
捆绑
例:8人排队
1.甲乙必须相邻:将甲乙捆绑,A(7,7)*2
2.甲乙不相邻:总情况减甲乙相邻,A(8,8)-A(7,7)*2
插空
某人射击8枪,连续中三枪,有几种情况
可以将连续中的三枪看成同一种情况,即在四枪空枪形成的空隙中5个中选2个排列A(5,2)
总结,捆绑和插空都是字面意思,要多做题才能掌握。
不定方成正整数解的个数
例:x1+x2+x3+...xn=M
书中对这题的答案很详细,我只能说重在理解,理解不了背公式也是很好的方法。
公式C(M-1,N-1)对公式分析,就是将右边的元素个数减一,左边的也减一,第二题就是这样的思路。
几个特殊数列
下面的两个数列不是一般高中生能理解,该理解的毕竟实在太难并且用处不大,一般也就3~4分。
这些东西就像斐波那契数列那样只要发现规律套就好了,因为我也不理解我只简单说一下。
Catalan数
直接上公式hn=*C(2n,n)
这个公式书中给了两个推导式
第一个式子是在一个n+2条边的突边行中画n-1条不相交的对角线将多边形分为n个三角形。设hn为n条边时的总情况数,令h0=1。接下来我们选一条边为基边,画三角形将图像分割成三个图形,一边为k边形,另一边为n-1-k边形,此时总方案数为hk*h(n-1-k)因为0<=k<=n-1所以总方案数为hn=hk*hn-1-k此式子即为catalan数列
第二个式子,先要提出个定理:n个+1和n个-1构成的2n项并且其所有前缀和大于0,相当于第n个Catalan数列
证明: n个+1和n个-1构成的集合中符合定理的称为可接受的。令An为可接受序列的数量,Un为不可接受序列的数量。对于一个不可接受序列一定存在一个最小的k使前k项的和小于0,显然k为奇数,且第k个数为-1,对前k个数取反+1变-1,-1变+1,后面的数保持不变,得到新数列N,这个数列有n+1个+1,和n-1个-1(因为前k个数-1比+1多一,取反后+1比-1多一,而后面的数不变,原本+1数量等于-1数量,改变后+1数量会比-1数量多一),此时新数列N和原数列是一一对应的映射关系,N数列数量会等于U数列数量,N数列数量为C(2n,n+1)。易得An+Un=C(2n,n),An=1/n+1*C(2n,n),定理成立。
应用
1.括号序列:一个有n个括号,有几种合法排序
将(视为+1,)视为-1,应为所有合法的序列的前缀和都大于0,所以看作Catlan数
2.有2n个人排队进入剧场,入场费50元,每个游客带着一张50元或100元,问如何排列使剧场都能找的开零钱,剧场一开始无零钱。将50元视为+1,100元视为-1,最后依然是Catlan数
第二类stirling数
S(n,k)表示将n个元素的集合划分成k个集合的方案数
递推关系 S(n,k)=S(n-1,k-1)+S(n-1,k)*k;S(n,1)=1,S(n,n)=1
应用将6个球放到3个盒子里,求总方案数,答案:S(6,3)
容斥原理和错位排列
容斥原理
先将全部情况算出再减去重复的情况,画Venn图
错位排列
对于一个1...n的任意排列,当任意第i位不是数字i时为错位排列,对于任意数字n有几种错位排列
分析:利用容斥原理用总情况减去第i位是i的情况设第i位是i的集合为Ai;错位排列个数为Dn,Dn=n!-|Ai|,设有k个数在固定位置上,另外(n-k)个数任意排列,1<=k<=n
综上,同时当n较小时应该用递推式
鸽巢原理
鸽巢原理:若有n个笼子和kn+1只鸽子,所有鸽子都被关在鸽笼里,那么至少有一个笼子有至少k+1只鸽子。
nim取石子游戏
最简单的取石子游戏
有一堆石子,共n个,两人轮流来取,至少取1个最多取m个,当n mod(m+1)=0时,先手必败;否则先手必胜
SG函数
先引入两个概念,一个是p-position,意味先手必败,也就是必败态,另一个是n-position意味先手必胜,也就是必胜态,需要注意两点,无论是必胜态还是必败态都是对于先手而言的,同时这个状态都是当前的状态,而不是结果的状态,对一局游戏而言会在必胜态和必败态之间转化。关于必胜态和必败态有一个重要性质,无法进行任何移动是必败态,能移动到必败态的一定有一个必胜态,必败态走到的都是必败态。
最后引入SG函数:最终状态的SG函数为0,其余状态的SG函数的值为它后继所有数中的最小非负整数,如1,2,3的最小非负整数位0,2,3的最小非负整数为1,如果当前SG函数为0,那么当前状态必败,否则必胜。
nim取石子游戏
现有若干堆石子,两人轮流操作,每人每次可以从任意一堆中取若干个,但是不能多取,取完最后一个石子的人获胜。对于这题我挂个视频
[解题十分钟] 第三期 为什么取石子游戏会和异或有关系?_哔哩哔哩_bilibili
这个视频中的nim函数就是SG函数,从中得到当每堆个数互相异或后结果大于0时为必胜态,同时在视频中我们得知,对于任意一个必胜态我们可以在某一堆中取某一值使整体异或值为0,从必胜态转变为必败态。
例:有5堆石子,个数为3 5 7 19 50,甲乙两人轮流取,甲先手,甲有没有必胜策略,如果有他要取哪一颗?
先判断是否有必胜态,对整体异或求值为32大于0,所以有必胜态,应为32的二进制最高位为4位,原石子中只有50比第4位大,50xor32=18,也就意味着剩下18个,取32个,我们可以对取完的结果进行验证会得到异或值为0,进入必败态。
最后图论以后再总结,我这玩意主要给自己看的所以有不好的地方希望大家指出。