组合数学整篇其实提供了的很多是数学的公式和抽象的模型用来解题。
原本打算谢谢母函数和特殊计数可是母函数现在的认识还是太浅了,所以就先写个特殊计数的stirling和catalan计数。
1.catalan计数
公式:
第n项为C(n,2n)/n+1
抽象模型:
1.设将n个1和n个0排成一排,要求如下:在任意前k个数中1的个数总要大于等于0的个数,或者说0的个数总要大于等于1的个数,这样的排列方案有多少种。
2.假设有一个n*n的网格,我们要求从左上角走到右下角,只能往下走或者往右走,求不过对角线的情况下我们有几种方案能完成任务
公式变型:
设第n项的值为C
Cn=C0 * Cn-1 + C1 * Cn-2+…+Cn-2 * C1+Cn-1 * C0
期中C0=1
Cn=(4n-2)/(n+1)Cn-1
Cn=C(n,2n)/(n+1)=(2n)!/((n+1)!*(n)!)
应用案例
1.HDU2067
模型2的裸题
2.括号匹配
括号匹配可以用栈的思维来做,就是每次入栈然后如果碰到右括号就出栈一个左括号,如果没有左括号就说明不配
用模型1的思想来看的话,其实一串括号也可以视为0和1,我们只需要满足模型1的在任意前k个数中1的个数总要大于等于0的个数也就是在前k个括号中满足左括号总是大于等于右括号的就可以,当然在最后左括号总是要等于右括号的。
3.出栈序列问题
如果要是给定一串数1 2 3 4 5按照先后入栈但是出栈顺序可以不定,即:12入栈后可以先出栈2再让3入栈。
问:出栈的序列一共有几种可能
枚举三个数我们发现,除非在第k个数的后面的数全是递增或者递减的才能合法(我们当然也可以用下标的思想去做)转化为模型1的话就是每个数必然入栈出栈的话,设入栈为1,出栈为0,1的个数必须大于等于1.我们发现用模型1去解这个问题最后也能转化为Catalan数
4.二叉树
n个节点构成的二叉树有几种情况?
5.多边形划分三角形问题
2.stirling数
属于比较直观的组合数学问题了
抽象模型:
1.n个物品放入k个环形排列中有几种放入的可能。
2.n个不同的物品放入k个相同的盒子中有几种可能。
先区分一下这两种模型,放进盒子中物品本身没有排列的状况,所以也就没有自身的组合情况需要分析。
比如1 2 3放入一个盒子里就是一种可能
但是放入一个圆排列里就是123 132两种可能(第一个位置不要变)
公式:
对应第一个模型:s(n,k)=s(n-1,k-1)+(n-1)*s(n-1,k)
对应第二个模型:s(n,k)=ks(n-1,k)+s(n-1,k-1)
应用:
第一个模型实例:
1.n个仓库每个两把钥匙,n个管理员,如何让每个管理员都能打卡所有仓库?
就是把n个物品放入一个圆排列里
2.如果这n个管理员隶属k个部门,每个有m管理员m仓库要管,让每个部门的管理员都能打开各自仓库的们。
n个物品放入k个圆排列中