卡特兰数
来源:互联网 发布:服装大师cad软件 编辑:程序博客网 时间:2024/04/28 01:11
Give you a convex(凸边形), diagonal n-3 disjoint divided into n-2 triangles(直线), for different number of methods, such as n=5, there are 5 kinds of partition method, as shown in Figure
- 输入
- The first line of the input is a n (1<=n<=1000), expressed n data set.
The next n lines each behavior an integer m (3<=m<=18), namely the convex edges. - 输出
- For each give m,, output how many classification methods.
example output: Case #a : b - 样例输入
3345
- 样例输出
Case #1 : 1
Case #2 : 2
Case #3 : 5
【代码】
void solve()
{ a[2] = 1, a[3] = 1, a[4] = 2, a[5] = 5;
for (int i = 5; i <= 18; i++)
a[i + 1] = a[i] * (4 * i - 6) / i ;
}
******************************************** 相关 ******************************************
Kn=C(2n,n)-C(2n,n-1)
这个Kn就是传说中的卡特兰数,简单吧~~ K0=1,
-----------------------------------------------------------------------------
三、卡特兰数的应用
1.给乘积X1X,X3......Xn加括号的方法数
将问题转化一下,就是爬坐标,左括号数一定要大于或者等于右括号数
2.排列三个1和三个-1,使得从左到右部分和总是非负的方法数
将问题转化一下,就是加括号的方法数,排1的个数一定要大于或者等于排的-1个数
3.给定四个1和四个0,进行排列组合,使得从左往右读0的个数不超过1的个数
将问题转化为读括号,从左往右读,左括号一定要大于或等于右括号个数。
4.来个看起来复杂点的:将1 2 3 4 5 6排成两行,使得每行3个数,并且每行从左往右读值增加,每一列小数在上
我们可以想象, 1 2 3代表左括号, 4 5 6代表右括号,为了从左往右读值增加,方法会有很多,但加上小数在上大数在下,就相当于左括号数总是大于或者等于右括号数么。假设这里的“左括号”少一个,那么下面一行对应会多一个左括号,而且因为值要求从小到大排列,即每行左括号总是在前,那么在上下对齐时,由于下面左括号要多,所以下行最后一个左括号肯定对齐着上行的右括号,是不符合要求的,但上面行的左括号要多这是没问题的。
5【 阿里巴巴笔试题】: 说16个人按顺序去买烧饼,其中8个人每人身上只有一张5块钱,另外8个人每人身上只有一张10块钱。 烧饼5块一个,开始时烧饼店老板身上没有钱。 16个顾客互相不通气,每人只买一个。 问这16个人共有多少种排列方法能避免找不开钱的情况出现。
将问题转化为:带5块钱的排前面的个数总是要大于带10块钱的人的个数,即C(16,8)-C(16,7)
6.【腾讯笔试题】 在图书馆一共6个人在排队,3个还《面试宝典》一书,3个在借《面试宝典》一书,图书馆此时没有了面试宝典了,求他们排队的总数?
将问题转化为:还书的人总是要大于或等于借书的人,即C(6,3)-C(6,2)
7. 出栈次序问题
一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?
将问题转化为:入栈的数的个数总是要大于或者等于出栈数的个数。 C(2n,n)-C(2n,n-1)
8【阿里巴巴笔试题】 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
C(12,6)-C(12,5)
- 卡特兰数,高精度卡特兰数
- 卡特兰数
- 卡特兰数(Catalan)
- 卡特兰数
- 卡特兰数
- 卡特兰数 大数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- linux通过wget直接下载jdk(避免用户验证)
- 并行计算—使用reduction方法求和
- 技术的正宗与野路子--论技术资料的重要性
- J2EE之java的注解
- Ubuntu 16.04 系统中安装配置 OpenCV 2.4.3 的方法
- 卡特兰数
- JAVA 解数独
- 第8周拓展实践 4.年龄几何
- 旋转的3D盒子
- python-set
- 更改系统默认导航栏的返回按钮
- RE:从零开始学gradle(二)
- spring transaction--事务架构
- XML学习笔记 -- day03 Dom4J解析xml详解