先看2个问题:


问题一:

n个元素进栈(栈无穷大),进栈顺序为1,2,3,....n,那么有多少种出栈顺序?

先从简单的入手:
n=1,当然只有1种;
n=2,可以是1,2  也可以是2,1;那么有2种;
n=3,可以是1,2,3或1,3,2或2,1,3或2,3,1或3,2,1;一共5种;
容易联想到可能有一个通项公式可以求;
(扯一点,以前学栈的时候做过判断一个序列是否为合法的出栈顺序的题目,只要依次检查序列,对于一个元素i,在i后面出来的且序号比i小的肯定是从大到小出来的,比如 4 2 1 3,如果4都出来了,那么栈里从上到下只能是3 2 1)
通项公式的推导:
起先设F[i]表示i个元素进出栈(入栈的编号从小到大)的方案数;F[0]=1;F[1]=1;F[2]=2;F[3]=5; 
对于F[n];假设编号为1的元素先入栈,在出栈,那么剩下n-1个元素,方案数就是F[1]*F[n-1];
假设编号为1和2的元素入栈出栈,有F[2]种方案,剩下n-2个元素,根据乘法原理方案数就是F[2]*F[n-2];
......
1,2,3,......n-1先入栈出栈......
相加就是总方案数
但是带入发现不对:其实这样枚举会漏解,因为这样枚举元素n永远都是最后一个出栈;
思路二:
假设元素1第一个出栈,剩下n-1个; 方案数就是F[0]*F[n-1];
假设元素1第二个出栈,剩下n-2个;1前面的1个元素出栈有F[1]种方案,后n-2个有F[n-2]种,根据乘法原理 方案数就是F[1]*F[n-2];
假设元素1第三个出栈,剩下n-3个;1前面的2个元素出栈有F[2]种方案,后n-3个有F[n-3]种,根据乘法原理 方案数就是F[2]*F[n-3]; 
......
假设元素1第n个出栈......
相加就是总方案数;
公式的话就是F[n]=F[k-1]*F[n-k](1<=K<=n);


问题2:

n个1和n个0组成一个2n位的二进制数;要求从左到右的1的累计数不少于0的累计数,求方案数。

假设有一个2n位的二进制数,从左到右某一位开始不满足条件,那么这一位前面的1和0一样多,所以这一位必定是奇数位。
设第2k+1位开始不满足条件,那么第2k+1位是0;前面2k+1位有k个1和k+1个0,剩下后面的(2n-2k-1)位有n-k个1和
n-k-1个0;如果把后面的(2n-2k-1)位中的n-k个1换成0,把n-k-1个0换成1;那么这个二进制数就变成了由n+1个0和n-1个1组成的二进制数;因此可知任意一个不符合要求的数都可以转化成一个由n+1个0和n-1个1组成的二进制数;
同理反过来 任意一个由n+1个0和n-1个1组成的二进制数都可以转化成一个不符合要求的数;证明:由于0比1多2个,必定在从某一个偶数位开始,0的个数比1多2个;同理把后面部分的01互换,就变成一个由n+1个0和n-1个1组成的二进制数;
所以总方案就等于 n个1和n个0组成一个2n位的二进制数的个数减去由n+1个0和n-1个1组成的二进制数的个数;
F[n]=C(2n,n)-C(2n,n-1)=C(2n,n)/(n+1);

由问题二 再来看 问题一:进栈的累计次数必定不少于出栈的累计次数,故
 F[n]=C(2n,n)-C(2n,n-1)=C(2n,n)/(n+1);
也等于 F[k-1]*F[n-k](1<=K<=n)。这就是Catalan数(数学家Catalan在研究乘法结合律的时候提出,即求一个式子a1*a2*a3*a4*a5*......an一共有多少种添加括号的方法);


总结:像这种某两个元素的总个数相等,但其中一个的累计数不小于另一个的题目都可以用Catalan数的公式来解决; 
 
相关练习:
1.2n个人排成一行买票,n个人只有10元整,n个人只有5元整,票价5元一张,问有多少种排队的方法,使得只要有带着10元的人买票,就有零钱可以找给他;
2.过河卒改编版,(图不好画,,结合过河卒的图吧)就是从左到右,n行n列,第一列只有从下到上1个 格子,第2列从下到上有2个,第n列有n个格子,从最左下角走到最右上角有多少种方案;

Catalan数的更多相关文章

  1. Catalan数应用整理

    应用一: codevs 3112 二叉树计数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 一个有n个结点的二叉树总共有 ...

  2. 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】

    Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...

  3. Catalan数(数论)

    Catalan数 [参考网址]http://www.cnblogs.com/gongxijun/p/3232682.html 记得当时我们队写过一个,差点超时,现在找到了公式,感觉还是挺简单的. 还要 ...

  4. Catalan数 && 【NOIP2003】出栈序列统计

    令h(1)=1, h(0)=1,catalan数满足递归式: h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)h(0) (n>=2) =C(2n, n)/(n+1) ...

  5. catalan数及笔试面试里那些相关的问题(转)

    一.catalan数由来和性质 1)由来 catalan数(卡塔兰数)取自组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项 ...

  6. Catalan数推导(转载)

    Raney引理: 设整数序列A = {Ai, i=1, 2, …, N},且部分和Sk=A1+…+Ak,序列中所有的数字的和SN=1,在A的N个循环表示中,有且仅有一个序列B,满足B的任意部分和Si均 ...

  7. HDU 4828 - Grids (Catalan数)

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=4828 Catalan数的公式为 C[n+1] = C[n] * (4 * n + 2) / (n ...

  8. 卡特兰数 Catalan数 ( ACM 数论 组合 )

    卡特兰数 Catalan数 ( ACM 数论 组合 ) Posted on 2010-08-07 21:51 MiYu 阅读(13170) 评论(1)  编辑 收藏 引用 所属分类: ACM ( 数论 ...

  9. 12个高矮不同的人,排成两排(catalan数)

    问题描述: 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 这个笔试题,很YD,因为把某个递归关系隐藏得很深. 问题分析: 我们先把这12个 ...

随机推荐

  1. Linux下搭建SVN服务

    SVN有几种方式进行访问,比较常见的是通过自带协议访问(svn://),配置很简单,还有一种就是http协议访问,需要结合apache服务,配置相对繁琐. 安装svn yum -y install s ...

  2. Mac 实用工具与问题解决

    1.在dock上方的一长溜,被我拖成个方块了 删掉里面的字符,然后按esc 即可! 2.FIT输入法(Fun Input Toy),是苹果操作系统OS X上的免费中文输入法,支持全拼/双拼/全双混拼, ...

  3. 自我总结(五)---(学习j2ee)

    自我完善的过程就是在不断的自我总结不断的改进. 我们这半个月来都是学习j2ee.这个知识是很重要的,一般我们出去工作都是会用到的.我们的星期六,星期天也是不上课的.所以说我相当于上了十天的j2ee了. ...

  4. 20160805_CentOS6_键盘快捷键

    1. 系统 -->首选项 --> 键盘快捷键 2. 3.

  5. iOS事件处理之七种手势

    手势在开发中经常用到,所以就简单通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView = [[UIImageView allo ...

  6. smarty 学习记录

    smarty模版是比较大众化的一个模版,在php开发过程当中被很多开发者视为最友好的模版之一,学习smarty课程对于很多培训机构来说也是列入了培训课程之一,那么很多方面就需要我们学习了一. 安装首先 ...

  7. AD组策略添加本地账号、设置允许ping回显

    AD组策略添加本地账号 1. 管理工具--组策略管理--选择相应GPO(编辑)----首选项--控制面板设置--本地用户和组--右键添加账号 2.域成员计算机刷新组策略(gpupdate/force) ...

  8. 在线读取Mongodb数据库下载EXCEL文件

    版本:Mongodb2.4.8 通过页面下载Excel文件 jsp <%@ page language="java" contentType="text/html; ...

  9. 【CodeForces 651A】Joysticks 模拟

    题意:给定a,b,每个单位时间可以将a,b中一台加1,一台减2,求最久可以支持多久. #include <cstdio> #include <algorithm> using ...

  10. canvas调节视频颜色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...