新GET了一种卡特兰数的应用……在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次。在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法。不会证明,当结论记住吧。f(i)=f(i-1)*(4*n-2)/(i+1) (2 2 using namesp...
分类:
其他好文 时间:
2014-10-27 09:19:37
阅读次数:
203
题目:气你一个整数n,问多少个节点可以生成n个不同的二叉树。
分析:数论,卡特兰数。根据定义即可。
说明:
#include
#include
using namespace std;
long long Cat[100];
int main()
{
Cat[0] = 1LL;
for (int i = 1 ; i < 20 ; ++ i)
Cat[i] = Cat[i...
分类:
其他好文 时间:
2014-10-14 11:54:38
阅读次数:
140
求卡特兰数前N项的和模M。直接求必定是不可能的,卡特兰数太大了。想了好久,本打算把位数拆成素数相乘,然后记录下各素数的个数计算。可惜,TLE。。。。因为N太大了。除法必定是要用到逆元的,但分母与M不一定互质。M拆成素数相乘形式,记录下各个素数在数组PRIME。于是,可以把4*i-2和i+1拆成素数相...
分类:
其他好文 时间:
2014-10-11 01:41:24
阅读次数:
215
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=948 卡特兰数*n! 1 import java.math.BigInteger; 2 import jav...
分类:
其他好文 时间:
2014-10-10 22:00:04
阅读次数:
158
题目链接:hdu 4828 Grids题目大意:略。解题思路:将上一行看成是入栈,下一行看成是出栈,那么执着的方案就是卡特兰数,用递推的方式求解。#include #include typedef long long ll;const int N = 1000005;const ll MOD = 1...
分类:
其他好文 时间:
2014-10-09 01:40:27
阅读次数:
378
一块药看成括号配对就行了。很明显的直接求卡特兰数。今晚看了HDU 3240的题,有一点思路,但无情的TLE。想不到什么好方法了,看了别人的解答,哇。。。简直是天才的做法啊。。。。留到星期六自己思考一遍再重新写。import java.math.BigDecimal;import java.math....
分类:
其他好文 时间:
2014-10-09 00:47:27
阅读次数:
353
把向上看成+1,向下看成-1.可以知道符合卡特兰数的一般解释了。记作Can(i)中间平过的即是0。亦即是C(n,2*i),i表示向上的数。于是总的就是sum(C(n,2*i)*Can(i)),i从0至n/2。注意,通项是可以通过递推求得的。import java.math.BigDecimal;im...
分类:
其他好文 时间:
2014-10-07 21:56:44
阅读次数:
241
N个节点的不同的树的数目。这样随便取一个节点作为根,那么他左边和右边的儿子节点个数就确定了,假定根节点标号为x,那么左子树的标号就从1到x-1,共x-1个,右子树的标号就从x+1到n,共n-x个,那么我们的x从1取到n,就获得了所有的情况数。这是一个递推的式子,初始值与卡特兰数的初值相同。所以,解正...
分类:
其他好文 时间:
2014-10-07 18:00:03
阅读次数:
160
卡特兰数。把进栈看成是+1,出栈看成是-1,任何时候部分和都有a1+a2+....ak>=0。求这样的数列的个数。这明显是卡特兰数的一个解释嘛。在《组合数学》这本书就有这样的原本的证明。import java.io.InputStreamReader;import java.math.BigDeci...
分类:
其他好文 时间:
2014-10-07 12:19:13
阅读次数:
178
卡特兰数的例题了。import java.math.BigDecimal;import java.math.BigInteger;import java.util.Scanner;import java.io.InputStreamReader;public class Main{ public s...
分类:
其他好文 时间:
2014-10-07 12:05:43
阅读次数:
149