什么是卡特兰数? 先看几个经典问题: n个元素依次入栈,其出栈序列的方案总数。 由n个1与n个-1组成的满足任意前缀和非负的序列总数。 多边形三角剖分方案数。 n个节点组成的不同二叉树方案数。 … 可以看出上述问题都有共同的特点,我们可以把它们都转化为这样一个模型: 在平面直角坐标中,起始位置在(0,0),每次只能(+1,+1)或(+1,-1),求在路线不跨越x坐标的前提下走到(2*n, 0) 的方案数。 如何做呢? 如果没有不跨越x坐标的限制,显然方案数为
不难得出,任意一条从从(0,-2)到(2n, 0)的路线都对应着一个不合法的方案。 得:
上面这种证明方法还可以进行拓展: 看看这个稍微变一下的问题:由n个1与m个-1组成的满足任意前缀和大于等于-a的序列总数。 还是转化成图形:在平面直角坐标中,起始位置在(0,0),每次只能(+1,+1)或(+1,-1),求在路线不跨越y=-a的前提下走到(n+m, n-m) 的方案数。 同样的方法,把某不合法的折线第一次与直线y=-a的交点之前的部分关于y=-a对称,得到一条从(0,-2a)走到(n+m, n-m) 的折线。 剩下的不用多讲了吧,答案:
新闻热点
疑难解答