nyoj164——卡特兰数(待填坑)
题意:将1~2n个数按照顺时针排列好,用一条线将两个数字连接起来要求:线之间不能有交点,同一个点只允许被连一次。
最后问给出一个n,有多少种方式满足条件。
卡特兰数(列):
令h(0)=1,h(1)=1,catalan数满足递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)
例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2 h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5
另类递推式: 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. 括号化:矩阵连乘:P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n-1)种)
2.一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?
3.给定n个点求能组成的二叉树所有总数。
4. 凸多边形三角划分(任意两顶点之间的连线必能相交),求有多少中分割的方法(类似:在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数)
5. n层阶梯切割为n个矩形的切割方法总数
代码
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1000000; const int moder = 1000000; int a[105][100]; void catalan() //求卡特兰数,a[i][j]存储的是第i个逆序(高位在后)的卡特兰数(从0开始),且未对高位0进行处理 {int i, j, len, carry, temp;a[1][0] = 1;len = 1;for(i = 2; i <= 100; i++){for(j = 0; j < len; j++) //乘法a[i][j] = a[i-1][j]*(4*(i-1)+2);carry = 0;for(j = 0; j < len; j++) //处理相乘结果 {temp = a[i][j] + carry;a[i][j] = temp % 10;carry = temp / 10;}while(carry) //进位处理 {a[i][len++] = carry % 10;carry /= 10;}carry = 0;for(j = len-1; j >= 0; j--) //除法 {temp = carry*10 + a[i][j];a[i][j] = temp/(i+1);carry = temp%(i+1);}} } int main() {int n;catalan() ;while(scanf("%d",&n) ,n != -1){int flag = 0 ;for(int i = 99;i >= 0;i--)//处理高位 {if(a[n][i] != 0)flag = 1;if(flag)printf("%d",a[n][i]);}printf("\n");}return 0; }
————不是很懂
转载于:https://www.cnblogs.com/cunyusup/p/8587028.html
nyoj164——卡特兰数(待填坑)相关推荐
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
转自:从<编程之美>买票找零问题说起,娓娓道来卡特兰数--兼爬坑指南 引子: 大约两个月前,我在练习一些招聘的笔试题中,有一道和卡特兰数相关.那时还没来得及开始仔细看<编程之美> ...
- 卡特兰数Catalan
1.卡特兰数的性质 其实重要的就两个公式:1和3. 公式1是卡特兰数的通项公式. 公式2是卡特兰数的递归公式.注意递推公式是C n+1=- 通常是发现问题可以用卡特兰数的递推公式来解决,从而想到卡特兰 ...
- Catalan数——卡特兰数
今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来 后来查了下,原来是Catalan数.悲剧啊,现在整理一下 Catalan数--卡特兰数] 一.Catalan数的定义令h( ...
- 卷积神经网络「失陷」,CoordConv来填坑
卷积神经网络「失陷」,CoordConv来填坑 作者:Rosanne Liu等 卷积神经网络拥有权重共享.局部连接和平移等变性等非常优秀的属性,使其在多种视觉任务上取得了极大成功.但在涉及坐标建模的任 ...
- P3200-[HNOI2009]有趣的数列【卡特兰数】
正题 题目链接:https://www.luogu.com.cn/problem/P3200 题目大意 求一个长度为2∗n2*n2∗n的排列要求 奇数位和偶数位分别递增 相邻的偶数位大于奇数位 解题思 ...
- [集训队作业2018] count(笛卡尔树,生成函数,卡特兰数)
传送门 什么情况下两序列同构 对于两序列A[1,n],B[1,n]A[1,n],B[1,n]A[1,n],B[1,n],设fA(1,n)=pa,fB(1,n)=pbf_A(1,n)=p_a,f_B(1 ...
- python符号格式化设置区间_[Python3 填坑] 001 格式化符号 格式化操作符的辅助指令...
1. print( 坑的信息 ) 挖坑时间:2019/01/08 明细 坑的编码 内容 Py004-6 Python 格式化符号 & 举例 Py004-7 Python 格式化操作符的辅助指令 ...
- 卡特兰数 默慈金数 默慈金三角形 反射原理
卡特兰数 公式 递推式: f ( n ) = ∑ f ( i ) ∗ f ( n − i − 1 ) f(n) = ∑f(i) * f(n-i-1) f(n)=∑f(i)∗f(n−i−1) 0 ≤ i ...
- 一个机械研究生在计算机与机械之间的徘徊与思考-(下)之填坑
现已研三(上 ),自问自答一下当初问机械研究生(智能制造方向)到底该学什么,主力该放在学术研究上还是系统开发上?先说现状,已签工作(华为IE工程师),也拿了国奖.研一上发一篇小论文,研一下一篇,研二上 ...
最新文章
- VUE中使用Echarts绘制地图迁移
- .NET开发人员值得关注的七个开源项目
- java 数值区间_java 各数据类型数值范围
- python百度云资源-python学习资源--百度云
- **kwargs特有的作用
- conda command not found ubuntu
- 你可能不知道的关于 Git stash 的技巧
- Java讲课笔记29:Swing入门
- 分布式技术追踪 2018年第二期
- 揭秘全球最大网站 Facebook 背后应用软件
- FPM一:简单的road map(GAF)
- 怎么判断笔记本显卡性能?笔记本显卡和台式机显卡性能差距大吗
- 借助计算机音乐,计算机音乐制作在高校作曲教学中的应用
- 判断是不是数字 Java_java如何判断是不是数字
- 【Android+Kotlin】自适应CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout与Palette
- 微信小程序wepy框架快速入门
- 2023年安徽省职业院校“磐云杯”网络安全竞赛任务书
- CSS教程--CSS字体
- 前端关于自己模拟接口做测试
- 华润MMX链上云的简介
热门文章
- 张恩民 php,php张恩民PHP中ltrim与rtrim去除左右空格及特殊字符实例
- 方根法公式_仓储管理笔记之库存分析法:ABC分析法、区域合并法......
- PAT_B_1003_Java(20分)
- linux mysql ibd_MySQL:如何从ibd文件中恢复数据
- YUV420数据格式
- C++中const迭代器 和 const_iterator的区别
- C# v7.0版本中的local function
- TensorFlow:实战Google深度学习框架(二)实现简单神经网络
- TensorFlow 2.X中的动手NLP深度学习模型准备
- 利用VLC搭建组播流服务器