入门:
先介绍三个简单的技术
插板法:
直接插板:
看下面的问题:
eg1:
\(x+y+z=20\),其中\(x,y,z\)为正整数,求有多少组解。
我们考虑有\(20\)个球排成一排。我们插入两个板子把这\(20\)个球分成\(3\)个部分,其中第一部分的球的个数是\(x\)的大小,第二部分是\(y\),第三部分是\(z\)。
这两个板子怎么插呢不难想到——插在\(19\)个缝里。也就是在\(19\)个缝里选\(2\)个。
答案是$C_{19}^{2} $
先转化,再插板(一一对应):
eg2:
\(x+y+z=17\),其中\(x,y,z\)为自然数,求有多少组解。
这个问题不好直接插板。因为可能有零的出现,多个板子可以插在同一个地方。你考虑这样一件事,就是说下面这个问题的解其实和上面的问题一样:
\((x+1)+(y+1)+(z+1)=20\),其中\(x,y,z\)为正整数,求有多少组解。
是不是豁然开朗。我令:
\(a=x+1,b=y+1,c=z+1\),就是\(a+b+c=20\),\(a,b,c\)为正整数,求解的组数,和最开始的问题毫无区别。而这其实建立里一组一一对应的关系把一组\(a,b,c\)的解对应到了一组\(x,y,z\)的解。
独立完成下面的问题:
eg3:
\(x+y+z=14\),其中\(x>=-1,y>=0,z>=-2\)且\(x,y,z\)为整数,求有多少组解。
答案
原问题可以化为:(x+2)+(y+1)+(z+3)=20,其中(x+2),(y+1),(z+3)为正整数,求有多少组解。
捆绑法:
eg1:
有$ABCDEFGH$8个人要做\(3\)个任务,\(EF\)要分同一个任务,有多少种分配方法?
如果没有\(EF\)分同一个任务的限制,就是一个插板法,可既然\(EF\)要分在一起,当成一个人(下文用\(K\)表示)就行了,问题可以转化为:
看下面的问题:有$ABCDKGH$7个人要做\(3\)个任务,有多少种分配方法?
这个问题直接插板就行了。
进阶:
Catalan 数(卡特兰数)
引入:
先看几个问题:
eg1.
有\(N\)个数要按顺序放进一个栈里,每次有可能弹出栈顶或放入下一个元素,问有多少种过程。
eg2.
一个人从原点出发,若当前处于\((x,y)\),下一次可以走到\((x+1,y+1)\)或\((x+1,y-1)\),走\(2* N\)步,不可以走到第四象限,最终走到\((2* N,0)\)的轨迹数。
eg3.
有一个\(N* N\)的格点图:
从\(A(0,0)\)走到\(B(N,N)\),不走对角线\(AB\)以下的方案数。
eg4.
\(N+1\)个节点的满二叉树的个数(可以把一个左儿子看成\(+1\),一个右儿子看成\(-1\))
发现了吗,这其实是一个问题,卡特兰数的模型是这样的;
- 从原点出发,向上走\(N\)步,向下走\(N\)步,其中只停留在正半轴的轨迹个数(可以到\(x\)轴),记作\(C_n\)。
计算Catalan 数
先不考虑只在正半轴的条件,方案数就是$C_{2 * n}^{n} $,这时我们只需要把不符合要求的删掉
记得上文插板法一一对应的思想吗?