卡特兰数
来源:互联网 发布:人工智能围棋柯洁 编辑:程序博客网 时间:2024/04/29 12:23
题目1:
矩阵的乘法添加括号我们知道,A*B可以,但是并不表示B*A也可以。假设有N+1个矩阵相乘,不能交换次序。只能用添加括号的方法来修改乘积的次序。那么有多少种添加括号的方法。
H(n)种。
题目2:
出栈次序问题,一个栈,其进栈的序列是从1~n,那么有多少种不同的出栈序列。
解:n 个元素进栈和出栈,总共要经历 n 次进栈和 n 次出栈。这就相当于对这 2n 步操作进行排列。
那么模型如下:对角线将以n*n正方形网格分成两部分,只留下包含对角线在内的下半部分。由于只能向右走和向下走,可以把向右走认为是在出栈,那么从左上角走到右下角,只需要H(n)步。因为只需要选择,在哪些地方向走右罢了。而总共肯定是需要向右走n步的。
题目3:
2n个人入场,n个人身上有10块,n个人身上有5块。票价是5块。那么如果要保证一直可以找零,那么入场的次序有多少种?
当有10块的人入场的时候,可以把他们看成是出栈,而5块的人入场当成入栈。则问题变得与出栈次序一样了。
题目4:
把1和0组合成一个序列,1的数目与0的数目都是一样的,为n个。有多少种排序使得从左向右扫描的时候,1的数目一直对0保持优势?
H(n)
题目5:
对于多边形三角形切分的时候,有多少种切分方法。
再如在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数
#include <iostream>#include <stdio.h>#include <cmath>using namespace std;int a[105][105]; //大数卡特兰数int b[105]; //卡特兰数的长度void catalan() //求卡特兰数{ int i, j, len, carry, temp; a[1][0] = b[1] = 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); } while(!a[i][len-1]) //高位零处理 len --; b[i] = len; }}int main(){ int i, n; catalan(); while(scanf("%d", &n) != EOF) { for(i = b[n]-1; i>=0; i--) { printf("%d", a[n][i]); } printf("\n"); } return 0;}
0 0
- 卡特兰数,高精度卡特兰数
- 卡特兰数
- 卡特兰数(Catalan)
- 卡特兰数
- 卡特兰数
- 卡特兰数 大数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 卡特兰数
- 使用casperjs抓取http://bm.scs.gov.cn/2015/StudentLogin.aspx
- Div 内容垂直居中
- 逆序数的拆分计算
- shell学习笔记之五(特殊字符)
- Leetcode_202_Happy Number
- 卡特兰数
- windows下文件编码和读写注意
- JSONArray JSONObject删除指定键值对
- git server搭建成功 & repo
- 开源跨平台程序崩溃抓取工具---breakpad
- selenium_webdriver(python)单/复选框的遍历选择
- 替代sublime? visual studio code
- 通联支付接口 undefined function: [php] Call to function bccomp
- UVa11582 - Colossal Fibonacci Numbers!(模运算)