卡特兰数源于组合数学,递推式为 H【1】 = 1;H【n】 = H【n-1】*(4*n-2)/(n+1){n>=2}

卡塔兰数的渐近增长为

下面给出几个求卡特兰数的公式,用h(n)表示卡特兰数的第n项,其中  h(0)=1,h(1)=1

公式一:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2)

公式二:h(n)=h(n-1)*(4*n-2)/(n+1)

公式三:h(n)=C(2n,n)/(n+1) (n=0,1,2,...)

公式四:h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)

其前几项为 :

1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

主要应用:

1.括号化问题

矩阵链乘:,根据乘法结合律,不改变顺序,只用括号表示对的乘积,有多少种括号化的方案?h(n)种

2.出栈次序问题:

一个栈(无穷大)的进栈次序为1,2,3,4,5,6.........n,有多少个出栈次序?

HDU1023

类似:

(1)有2n个人排成一行进入剧场,入场费5元,其中只有n个人有一张5元,另外n个人只有10元,剧院无其他钞票,问有多少种方法使得只有10元的人买票(售票处只有5元找零)?

将持5元者到达视作将5元入栈,持10元者到达视作栈中某5元出栈

HDU4165

(2)在圆上选择2n个点,将这些点成对连接起来,使得所得到的n条线段不相交的方法数?h(n)种

POJ2084

3.将多边形划分为三角形问题,将一个凸多边形区域分成三角形区域的方法数?

类似:

(1)一位律师在他住所以北n个街区和以东n个街区处工作,每天他走2n个街区上班,如果不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?ans=2*h(n)

HDU2067

4.给n个节点,能构成多少种形状不同的二叉树?

先去掉一个点作为顶点,左边依次可以取0至N-1个,右边是N-1到0个,两两配对相乘,就是

h(0)*h(n-1)+h(2)*h(n-2)+......+h(n-1)*h(0)=h(n)

import java.util.*;
import java.math.*;
public class Main {public static void main(String[] args) {BigInteger[] arr = new BigInteger[107];arr[1]=BigInteger.ONE;for(int i=2;i<=100;i++) {arr[i] = arr[i-1].multiply(BigInteger.valueOf(4*i-2)).divide(BigInteger.valueOf(i+1));}Scanner cin=new Scanner(System.in);while(cin.hasNext()) {int n=cin.nextInt();if(n==-1)break;System.out.println(arr[n]);}cin.close();}
}

HDU3723

A delta wave is a high amplitude brain wave in humans with a frequency of 1 – 4 hertz which can be recorded with an electroencephalogram (EEG) and is usually associated with slow-wave sleep (SWS). 
-- from Wikipedia

The researchers have discovered a new kind of species called "otaku", whose brain waves are rather strange. The delta wave of an otaku's brain can be approximated by a polygonal line in the 2D coordinate system. The line is a route from point (0, 0) to (N, 0), and it is allowed to move only to the right (up, down or straight) at every step. And during the whole moving, it is not allowed to dip below the y = 0 axis.

For example, there are the 9 kinds of delta waves for N = 4:

Given N, you are requested to find out how many kinds of different delta waves of otaku.

Input

There are no more than 20 test cases. There is only one line for each case, containing an integer N (2 < N <= 10000)

Output

Output one line for each test case. For the answer may be quite huge, you need only output the answer module 10 100.

Sample Input

3
4

Sample Output

4
9

题意:

在第一象限,从(0,0)到(n,0)点,每次y值的差值最大为1,要么加1(向上走),要么减1(向下走),要么不变(水平),问有多少种走法?

分析:

起点和终点在一条直线上,所以向上 i 次,就要向下 i 次,且(0<=i<n/2, i+i <=n),而上下的次序不固定,显然就是 i 个元素进栈出栈的次序,方案数为    (公式三);

从n个元素中选出2*i个向上走或者向下走,n-2*i 个元素水平走,方案数为  ;

向上0次,向下0次,水平直线走,方案数为  ;

向上 i 次,向下 i 次,方案数 

向上i+1次,向下i+1次,方案数 

递推式:

import java.math.*;
import java.util.*;public class Main{public static void main(String[] args) {Scanner cin=new Scanner(System.in);while(cin.hasNext()) {BigInteger ans=BigInteger.ONE;BigInteger tmp=BigInteger.ONE;int n=cin.nextInt();for(int i=0;i<=n/2;i++) {tmp=tmp.multiply(BigInteger.valueOf(n-2*i)).multiply(BigInteger.valueOf(n-2*i-1)).divide(BigInteger.valueOf(i+2)).divide(BigInteger.valueOf(i+1));ans=ans.add(tmp);}ans=ans.mod(BigInteger.TEN.pow(100));//mod 10^100System.out.println(ans);}cin.close();}
}

Catalan Numbers 卡特兰数相关推荐

  1. Catalan number卡特兰数

    背景知识介绍:   卡特兰数是离散数学中的一个重要数列,是很多生活场景的一个抽象,比如买早餐.买电影票等等.在很多大公司的笔试或者面试题中也常涉及到. 百度百科介绍   卡特兰数   卡特兰数是组合数 ...

  2. 专辑:Catalan number 卡特兰数(卡塔兰数)

    概念 卡特兰数序列:1,1,2,5,14,42,132,429,1430,4862,16796...1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796... ...

  3. C语言Catalan number卡特兰数(使用n个键可以搜索多少个二叉搜索树)的算法(附完整源码)

    C语言使用n个键可以搜索多少个二叉搜索树的算法 C语言使用n个键可以搜索多少个二叉搜索树的算法完整源码(定义,实现,main函数测试) C语言使用n个键可以搜索多少个二叉搜索树的算法完整源码(定义,实 ...

  4. 卡特兰数 Catalan number

    卡特兰数 Catalan number 卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 74290 ...

  5. nyoj164——卡特兰数(待填坑)

    题意:将1~2n个数按照顺时针排列好,用一条线将两个数字连接起来要求:线之间不能有交点,同一个点只允许被连一次. 最后问给出一个n,有多少种方式满足条件. 卡特兰数(列): 令h(0)=1,h(1)= ...

  6. 如何求卡特兰数——代码如下

    void catalan() //求卡特兰数 { int i, j, len, carry, temp; a[1][0] = b[1] = 1; len = 1; for(i = 2; i <= ...

  7. Catalan数——卡特兰数

    今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来 后来查了下,原来是Catalan数.悲剧啊,现在整理一下 Catalan数--卡特兰数] 一.Catalan数的定义令h( ...

  8. C++打印0到N的Catalan数卡特兰数(附完整源码)

    打印0到N的Catalan数卡特兰数 打印0到N的Catalan数卡特兰数算法的完整源码(定义,实现,main函数测试) 打印0到N的Catalan数卡特兰数算法的完整源码(定义,实现,main函数测 ...

  9. 程序员数学--卡特兰数(Catalan number)

    10个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问有多少种排列方式? 我们可以先把这10个人从低到高排列,然后,选择5个人排在第一排,那么剩下的5个人肯定是在第二 ...

最新文章

  1. 研究生应锻炼的24种能力
  2. 负数对2取余_不同语言的负数取余问题
  3. 解决git bash闪退问题
  4. [51nod] 1267 4个数和为0
  5. MongoDB学习笔记(一)--基础
  6. UVa12633-Super Rooks on Chessboard-容斥+FFT
  7. 51NOD 1088 最长回文子串1089 最长回文子串 V2(Manacher算法)
  8. Java Web应用实现GZIP压缩传输
  9. toastr-min.css,Toastr插件提示框使用说明
  10. OpenGL 获取当前屏幕坐标对应的三维坐标
  11. bzoj 2555: SubString
  12. 手机都可以直接敲R了,还要电脑干嘛
  13. 九月热点:EasyDL智能边缘控制台、EdgeBoard路内停车分析盒全新发布
  14. 2021年美容师(初级)报名考试及美容师(初级)最新解析
  15. 我们要做一个靠谱的人~以信而立天下
  16. JavaScript新人总结
  17. 所谓计算机网络是指利用通信设备,《计算机应用基础》模拟试卷考卷二含答案...
  18. 笔记本 原因代码: 0x500ff 关机类型: 关闭电源_关于笔记本电池更换的建议
  19. Java开发常用软件列表——持续更新
  20. IDEA基本使用(三):模板

热门文章

  1. Python常用正则表达式总结
  2. MessagePack 学习笔记
  3. MVC与单元测试实践之健身网站(八)-统计分析
  4. Ant学习总结5(配合Ant视频8,9)
  5. 软件测试自学钢琴考级,钢琴考级被音基难倒?不要慌,跟着这款钢琴陪练APP一起练...
  6. 【mathematical statistics】4 hypothesis testing
  7. swap冒泡函数java_一个冒泡排序程序,將交换数组的两个元素的功能用一个Swap()方法实现...
  8. cpu功耗排行_2020 主流手机处理器排行榜
  9. 浅拷贝 python_python中什么是浅拷贝
  10. 小学一年级第一次上计算机课,小学一年级上册信息技术教案【三篇】