最常用的两个式子:
常见的问题形式
- n个左括号和n个右括号所能组成的合法序列数为(Cat_n)
- 扩展:有n个左括号,n个右括号,恰有2m个括号失配的序列数为({2n choose n-m}-{2n choose n-m-1})
-
1,2,3,...n经过一个栈,能形成的合法出栈序列数为(Cat_n)
-
n个节点构成的不同二叉树数量为(Cat_n)
-
在笛卡尔坐标系(平面直角坐标系)中从((0,0))走到((n,n)),只向上或向右走,不接触直线(x=y)的方案数,为(Cat_n)。
- 这也是Catalan数最常见的理解形式。常见的证明方法为对折法,即将一条非法路径碰触到直线(y=x+1)之后的部分沿该直线对折,最后终点为((n-1,n+1))。用合法路径数减去非法路径数即为所求答案。即({2n choose n} - {2n choose n-1})。
-
不相交弦:在圆上选择2n个点,将这些点两两连接使所得的n条线段不相交的方案数。
-
n个10元,n个5元,多少种方案使得用10元时一定有5元可供找零。
以上只是列举了部分内容,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)。
第二种情况:
第三种情况是个DP,就略过了。
第四种情况:
类比第一种情况,同样是枚举左右(上下)