1.定义

2.性质

(1)

(2)

(3)


(4)

3.应用

(1)长度为2n的dyck word的个数。dyck word是一个有n个X和n个Y组成的字串,且所有的前缀字串皆满足X的个数大于等于Y的个数。

假设存在一个最小的k,使得前(2k+1)位中有k个X,(k+1)个Y。因为k是最小的,所以第(2k+1)位是Y。我们将前(2k+1)项中的X变为Y,Y变为X,那么就得到一个有(n+1)个X和(n-1)个Y的序列了,反之亦然。此即为性质(1)。

(2)在n个+1和n个-1组成的序列中,前k项和满足a1+a2+...+ak>=0,1<=k<=2n的序列个数。

假设存在一个最小的k,使得a1+a2+...+ak<0。因为k是最小的,所以a1+a2+...+ak-1=0,ak=-1,并且k是一个奇数。我们将前k项中的+1变为-1,-1变为+1,那么就得到一个有(n+1)个+1和(n-1)个-1的序列了,反之亦然。此即为性质(1)。

(3)包含n组括号的合法运算式的个数。

X表示左括号,Y表示右括号。

(4)n个节点组成不同构二叉树的方案数。

考虑根节点,左子树有i个节点,右子树有(n-1-i)个节点。


(5)(2n+1)个节点组成不同构满二叉树(没有度为1的节点)的方案数 or 拥有(n+1)个叶子节点的满二叉树的数量。

n个节点组成的二叉树中度为0/1的节点添加2/1个孩子(叶子节点),形成一颗满二叉树。

(6)在n*n格点中不越过对角线的单调路径的个数。

X表示向右,Y表示向上。

(7)凸(n+2)边形三角划分个数。

考虑一条边及以它为底的三角形,假设该三角形左边是i边形,那么右边是(n+1-i)边形。


(8)数字1,2,...,2n被放置在一个2*n的矩形中并保证每行每列的数字升序排列的方案数。

解法一:X表示放在第一行,Y表示放在第二行。

解法二:杨氏矩阵

勾长公式


(9)用n个长方形填充一个高度为n的阶梯状图形的方法个数。

考虑一个长方形填充第1到(i+1)列,它的右边是一个高度为i的阶梯状图形,下面是一个高度为(n-1-i)的阶梯状图形。

(10)出栈次序。

X表示入栈,Y表示出栈。

(11)将圆上的2n个点成对连接起来所得到的n条线段不相交的方法数。

考虑一条线段,它的左边是圆上的2i个点,右边是圆上的2(n-1-i)个点。

(12)(n+1)个数相乘,所有的括号方案数。

考虑左右两段乘积,左边为i个数的乘积,右边为(n-i)个数的乘积。


4.扩展

(1)n+m个人排队买票,并且满足n>=m,票价为50元,其中n个人手持一张50元钞票,m个人手持一张100元钞票,除此之外大家身上没有任何其他的钱币,并且初始时候售票窗口没有钱,问有多少种排队数能够让大家都买到票。

假设存在一个最小的k,使得前(2k+1)位中有k个50,(k+1)个100。因为k是最小的,所以第(2k+1)位是100。我们将前(2k+1)项中的50变为100,100变为50,那么就得到一个有(n+1)个50和(m-1)个100的序列了,反之亦然。

5.题目

(1)HDU4165

解法一:动态规划

#include<iostream>
using namespace std;
const int n=10;int g(int f[][n+1],int i,int j)
{if(j>=0)return f[i][j];else return 0;
}int pills(int f[][n+1])
{int i,j;for(j=0;j<=n;j++)f[0][j]=1;for(i=1;i<=n;i++){for(j=0;j<=n-i;j++)f[i][j]=g(f,i-1,j+1)+g(f,i,j-1);}return f[n][0];
}int main()
{int f[n+1][n+1];cout<<pills(f)<<endl;return 0;
}

解法二:

X代表整片,Y代表半片。

(2)阿里巴巴笔试题:16个人按顺序去买烧饼,其中8个人每人身上只有一张5块钱,另外8个人每人身上只有一张10块钱。烧饼5块一个,开始时烧饼店老板身上没有钱。16个顾客互相不通气,每人只买一个。问这16个人共有多少种排列方法能避免找不开钱的情况出现。

C8=1430,总数=1430*8!*8!。

(3)腾讯笔试题:在图书馆一共6个人在排队,3个还《面试宝典》一书,3个在借《面试宝典》一书,图书馆此时没有了面试宝典了,求他们排队的总数。

C3=5,总数=5*3!*3!。

卡塔兰(Catalan)数相关推荐

  1. C语言实现卡塔兰数catalan(附完整源码)

    实现卡塔兰数catalan 实现卡塔兰数catalan完整源码(定义,实现,main函数测试) 实现卡塔兰数catalan完整源码(定义,实现,main函数测试) #include <stdio ...

  2. 卡塔兰数(Catalan Number)--动态规划(Dynamic Programming)

    -卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡特兰(1814–1894)命名.历史上,清朝数学家明安图(1692年-1763年)在其<割圜密率捷法> ...

  3. Catalan卡塔兰数

    卡塔兰数 卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项公式为  另类递归式:  h(n)=((4*n- ...

  4. 【卡塔兰数】LeetCode 96. Unique Binary Search Trees

    LeetCode 96. Unique Binary Search Trees 本博客转载自:http://www.cnblogs.com/grandyang/p/4299608.html Solut ...

  5. 卡特兰数 卡塔兰数 概念 代码实现 模型分析全集

    特别鸣谢 参考1 参考2 参考3 概念 情境导入 一个栈(无穷大)的进栈序列为1,2,3,-,n,有多少个不同的出栈序列? 可以形象化地转化为括号问题,更好理解,进栈是(,出栈是),下面为n=3的全部 ...

  6. leetcode(96)不同的二叉搜索树——卡塔兰数

    题目描述 给定一个整数 n,求以 1 - n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树:1 3 3 2 1\ / ...

  7. 卡塔兰数(Catlan)

    refernce: http://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0 卡塔兰数是组合数学中一个常在各种计数问题中出现的 ...

  8. 卡塔兰数用于求解不同形态的二叉树的数目,题目选自CS61A2021 LAB9 Q3: Number of Trees

    完全二叉树是一种每个节点都有2个分支或0个分支,但从来没有1个分支的树. 编写一个函数,返回恰好有n个叶结点的唯一完整二叉树结构的数目. 对于那些对组合学感兴趣的人来说,这个问题确实有一个封闭形式的解 ...

  9. 卡特兰数(卡塔兰数)

    卡特兰数(卡塔兰数) 另附图一张: 来源:百度百科 典例: hdu 2067 小兔的棋盘 Problem Description 小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间, ...

最新文章

  1. Flask开发服务器启动方式
  2. VR医疗|全球首例“换头手术”成功了么?
  3. 【机器学习入门到精通系列】SVM与核函数(附程序模拟!)
  4. transform css3 的使用及理解
  5. 虚拟化、完全虚拟化、半虚拟化和准虚拟化技术区别
  6. 爬虫苦训第一天,我的第一个爬虫!!!
  7. css property 和 attribute 的区别
  8. Shady 深度学习课程
  9. 比特币:一种点对点的电子现金系统
  10. 怎样维系和监督多项计划
  11. 73. 文件上传函数封装
  12. 排序算法专题-桶排序
  13. 查询数据库中所有的表的信息
  14. plc模拟器软件_【万泉河】咸鱼上买了个二手施耐德PLC,上当了。
  15. CAJ转换有免费的工具吗?
  16. 谷歌浏览器安装插件的方法步骤
  17. 计算机网络设计——企业网络规划与搭建
  18. 使用MISO进行可变剪切的分析
  19. Linux移植Windows摄像头驱动,基于3.14内核usb摄像头驱动的移植
  20. 深度学习推理框架调研总结

热门文章

  1. Maven(一):什么是Maven?
  2. MySQL数据库——MySQL INSERT:插入数据(添加数据)
  3. 争做社会主义接班人!!!
  4. 两款非常好的Redis 可视化管理工具:Another Redis Desktop Manager、QuickRedis
  5. 三维偏序/cdq分治/
  6. 逐渐成熟 Intel VT技术性能初探
  7. 主板维修测试软件,主板维修关键测试点(强烈推荐)
  8. IDEA安装教程及插件推荐
  9. Z 字形变换(java版)
  10. ORACLE给指定用户授权表的部分权限