关于卡特兰数及典型例题

关于卡特兰数:
f[0] = 1, f[1] = 1;
for(int i = 2; i <= n; i++)
    for(int j = 0; j < i; j++)
        f[i] += f[j] * f[i-j-1];

关于乘法原理和加法原理:
1.便捷记忆:乘法原理:步步相关

                    加法原理:类类独立

2.区别:对于乘法原理,我们假设解决一件事需要n步。再假设完成第1步有m1种方法,完成第2步有m2种方法........完成第n步有mn种方法。则对于完成这件事的总方法数:Total = m1 * m2 * m3 * ..... *mn

            那么对于加法原理,我们就假设解决一件事有n种解决方案数。假设第一种方案有m1种解决方法,第2种方案有m2种解决方法.....第n种方案有mn种解决方法。则对于完成这件事的总方法数:Total = m1 + m2 + m3 + ...... +mn

一些实例:

1.二叉树记数

2.出栈序列
3.加括号

4.凸多边形划分

      给凸多边形每个定点标上编号1,2,3,......,n。边1n一定属于某个三角形1nk。可以看出1nk的左边是一个k边形,右边是一个n - k + 1边形;根据乘法原理有方案数为f[k][n - k + 1],然后根据加法原理得出答案。

代码的核心部分是一样的...

posted @ 2018-02-12 20:02  Stooge  阅读(369)  评论(0编辑  收藏  举报