卡特兰数
栈是一种常见的数据结构,有许多关于栈的问题,其中之一就是统计元素可能的出栈序列。具体说,就是给定n个元素,依次通过一个栈,求可能的出栈序列的个数。
如果我们用直接模拟的方法,当n较大时会很费时间;
例如动态规划。令f[i,j]表示栈内有i个元素且栈外有j个元素还未进栈,那么以进栈还是出栈为决策就马上得到了转移方程f[i,j]=f[i-1,j]+f[i+1,j-1]。如此一来,很...
分类:
其他好文 时间:
2014-06-11 06:29:56
阅读次数:
296
http://poj.org/problem?id=1095先求出n个节点数的二叉树的形态有多少种。卡特兰数f[n]=f[n-1]*(4*n-2)/(n+1);再递归求。
1 #include 2 #include 3 #include 4 #define ll long long 5 #de...
分类:
其他好文 时间:
2014-06-09 15:14:11
阅读次数:
167
题目链接分析:打表以后就能发现时卡特兰数, 但是有除法取余。f[i] = f[i-1]*(4*i -
2)/(i+1);看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展gcd, 不是用逆元吗。。网上还有别人的解释,没看懂,贴一下:(a /
b) % m = ( a % (m*...
分类:
其他好文 时间:
2014-05-27 16:17:10
阅读次数:
305
什么是Catalan数说到Catalan数,就不得不提及Catalan序列,Catalan序列是一个整数序列,其通项公式是我们从中取出的就
叫做第n个Catalan数,前几个Catalan数是:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796,
5878...
分类:
其他好文 时间:
2014-05-25 19:48:23
阅读次数:
280
Grids
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 93 Accepted Submission(s): 25
Problem Description
度度熊最近很喜欢玩游戏。这一天他在纸上画了...
分类:
其他好文 时间:
2014-05-25 16:52:16
阅读次数:
251
HDU 4828 Grids
思路:可以转化为卡特兰数,先把前n个人标为0,后n个人标为1,然后去全排列,全排列的数列,如果每个1的前面对应的0大于等于1,那么就是满足的序列,如果把0看成入栈,1看成出栈,那么就等价于n个元素入栈出栈,求符合条件的出栈序列,这个就是卡特兰数了。然后去递推一下解,过程中需要求逆元去计算
代码:
#include
#include
const int ...
分类:
其他好文 时间:
2014-05-25 12:52:33
阅读次数:
389
代码太丑就不贴了,,又是一篇无责任民科的题解。。
HDU 4828 Grids
看了一下跟卡特兰数差不多就猜了一下,具体为啥我也不知道。。然后有除法套个逆元。。
HDU 4830 Party
发现这个除了叶子节点可能是环,剩下就是一棵树了(如果是单独的环,就用虚拟节点0来连接一下)
剩下就是环状树形dp。。...
分类:
其他好文 时间:
2014-05-25 07:23:48
阅读次数:
281
题目来源:UVa 991 Safe Salutations
题意:圆上2*n个点均匀分布 两两相连 求不相交的方案数
思路:卡特兰数的应用
/*
最典型的四类应用:(实质上却都一样,无非是递归等式的应用,就看你能不能分解问题写出递归式了)
1.括号化问题。
矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)...
分类:
其他好文 时间:
2014-05-14 20:52:44
阅读次数:
370
这道题之前自己做的时候并没有反应过来是求卡特兰数,当时是按递推来想的。后来查了下HDU4165,结果一看大标题就说是卡特兰数,自己想了想,还真是那么回事。主要还是对于卡特兰数用的不多,也就当时没立马反应过来了。下面介绍这道题我的思路,然后对卡特兰数再做一些补充。本题题意:罐子里有N片相同的药片,开始...
分类:
其他好文 时间:
2014-05-13 09:52:56
阅读次数:
300
原题链接: http://oj.leetcode.com/problems/unique-binary-search-trees/
这道题要求可行的二叉查找树的数量,其实二叉查找树可以任意取根,只要满足中序遍历有序的要求就可以。从处理子问题的角度来看,选取一个结点为根,就把结点切成左右子树,以这个结点为根的可行二叉树数量就是左右子树可行二叉树数量的乘积,所以总的数量是将以所有结点为根的可行结果...
分类:
其他好文 时间:
2014-04-30 22:12:39
阅读次数:
244