Most Important Formulas
以下部分来自http://lanqi.org/skills/10939/
Problem
对于的进栈序列,有多少合法的出栈序列。
Solution
把进出栈看作事件,进栈记,出栈记,则一个事件序列的任意前缀和都 首先有个,先不管是否合法,只管总个数,那么序列的数目为 要从中减去不合法的,这样考虑: 每个不合法的序列,最先不合法的位置,一定是前缀和为,比多了一个 那么把的数字全部取反,整个序列就有个,个。 记不合法的方案集合为,存在个,个的序列集合为, 现在要证明的是中的元素与中的元素构成一一映射。 首先,,可以转换为唯一的 而对于,如果从第二个前缀和为的位置开始取反,那取反后第一个前缀和为的位置必然不是,那这种不合法方案转化出对应的,所以一定唯一对应。 即不合法的方案数为
Another Example
(搜到的一个解说三角划分方案数的图,似乎来自一个被封的csdn博客)
这样可以把三角划分转化为划分序列连乘顺序
序列连乘顺序可以转化为合法括号序列数目
然后就可以解决了Tips
Catalan数是用映射来解决计数问题的。当有某种属性的方案不好统计的时候,就把这种方案的集合与其它比较容易统计的方案建立一一映射。这种转化思路大概即为其巧妙之处吧。
Problem
圆周上有个点,以这些点为端点连互不相交的条弦,求不同连法的总数
Solution
考虑DP。 设表示个点时的答案,则,答案为。 显然,任意弦的两端点之间的优弧和劣弧上都一定有偶数个点 所以, 将代入, 考虑Catalan数的递推式 可以看出
Other Examples
- 个顶点的不同二叉树的个数是。
- 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,排列方式有种
- 设为整数,且满足下列条件:
- 则满足上述条件的序列的个数是
- 设与是两个完全不同的序列,则把这两个序列归并组成一个新的序列,恰有个逆序的方案数是(一个逆序是指排在的后面)。(想了很长时间不知道怎么证明)