Catalan数总结

最常用的两个式子:

[Cat_{n}=frac{2n choose n}{n+1} ]

[Cat_{n}={2n choose n} - {2n choose n-1} ]

常见的问题形式

  1. n个左括号和n个右括号所能组成的合法序列数为(Cat_n)
  • 扩展:有n个左括号,n个右括号,恰有2m个括号失配的序列数为({2n choose n-m}-{2n choose n-m-1})
  1. 1,2,3,...n经过一个栈,能形成的合法出栈序列数为(Cat_n)

  2. n个节点构成的不同二叉树数量为(Cat_n)

  3. 在笛卡尔坐标系(平面直角坐标系)中从((0,0))走到((n,n)),只向上或向右走,不接触直线(x=y)的方案数,为(Cat_n)

  • 这也是Catalan数最常见的理解形式。常见的证明方法为对折法,即将一条非法路径碰触到直线(y=x+1)之后的部分沿该直线对折,最后终点为((n-1,n+1))。用合法路径数减去非法路径数即为所求答案。即({2n choose n} - {2n choose n-1})
  1. 不相交弦:在圆上选择2n个点,将这些点两两连接使所得的n条线段不相交的方案数。

  2. n个10元,n个5元,多少种方案使得用10元时一定有5元可供找零。

一篇介绍Catalan数的博客

以上只是列举了部分内容,Catalan数的形式远不止这些。

例题

题目描述

出个题就好了.这就是出题人没有写题目背景的原因.
你在平面直角坐标系上.
你一开始位于((0,0))
每次可以在上/下/左/右四个方向中选一个走一步.
即:从((x,y))走到((x,y+1),(x,y-1),(x-1,y),(x+1,y))四个位置中的其中一个.
允许你走的步数已经确定为(n)。现在你想走(n)步之后回到((0,0))。但这太简单了.你希望知道有多少种不同的方案能够使你在(n)步之后回到((0,0))。当且仅当两种方案至少有一步走的方向不同,这两种方案被认为是不同的.
答案可能很大所以只需要输出答案对(10^9+7)取模后的结果。
这还是太简单了,所以你给能够到达的格点加上了一些限制.一共有三种限制,加上没有限制的情况,一共有四种情况,用0,1,2,3标号:
0.没有任何限制,可以到达坐标系上所有的点,即能到达的点集为{(x,y)|x,y为整数}
1.只允许到达x轴非负半轴上的点.即能到达的点集为{(x,y)|x为非负数,y=0}
2.只允许到达坐标轴上的点.即能到达的点集为{(x,y)|x=0或y=0}
3.只允许到达x轴非负半轴上的点,y轴非负半轴上的点以及第1象限的点.即能到达的点集为{(x,y)|x>=0,y>=0}

分析

第一种情况:枚举左右(或上下)走的步数(0~n)(每次+2)。

[ans = sum{{n choose i} imes {i choose {frac{i}{2}}} imes {n-i choose frac{{n-i}}{2}}} ]

第二种情况:

[ans = Cat(frac{n}{2}) ]

第三种情况是个DP,就略过了。

第四种情况:

类比第一种情况,同样是枚举左右(上下)

[ans = sum{{n choose i} imes Cat(frac{i}{2}) imes Cat(frac{n-i}{2}) } ]

原文地址:https://www.cnblogs.com/Zfio/p/catalan.html