POJ 2084 Catalan数+高精度

POJ 2084

/****************************************
 *       author        :  Grant Yuan
 *       time            :   2014/10/19 15:42
 *       source       :    POJ 2084
 *       algorithm:     Catalan数+高精度
 * ***************************************/
import java.io.*;
import java.math.*;
import java.util.*;
public class Main{
	public static void main(String args[])
	{
		Scanner cin=new Scanner(System.in);
		BigInteger []a = new BigInteger [105];
		BigInteger t;
		a[0]=a[1]=BigInteger.ONE;
		for(int  i=2;i<=102;i++)
		{
			a[i]=a[i-1].multiply(BigInteger.valueOf(4*i-2)).divide(BigInteger.valueOf(i+1));
		}
		while(true){
			int n=cin.nextInt();
			if(n==-1) break;
			String str;
			str=a[n].toString();
			System.out.println(str);
		}
	}
}
时间: 2024-10-11 02:30:01

POJ 2084 Catalan数+高精度的相关文章

POJ 2084 Catalan数

[题意]: 一个环上有2*N个连续的数,求将这些数两两连接且连接的边不相交的方法数. [知识点]: 数学+Catalan数 令h(1)=1,h(0)=1 递归式1:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2) 递归式2:h(n)=((4*n-2)/(n+1))*h(n-1); 该递推关系的解为:h(n)=C(2n,n)/(n+1) (n=1,2,3,...) [题解]: Catalan数典型的应用,2*N的答案为h(N). [

HDU 1023 Catalan数+高精度

链接:HDU 1023 /**************************************** * author : Grant Yuan * time : 2014/10/19 15:51 * source : HDU 1023 * algorithm : Catalan数+高精度 * ***************************************/ import java.io.*; import java.math.*; import java.util.*;

UVA10303 - How Many Trees?(java大数+catalan数)

UVA10303 - How Many Trees?(java大数+catalan数) 题目链接 题目大意:给你1-N N个数,然后要求由这些数构成二叉搜索树,问有多少种这样的二叉搜索树. 解题思路:把前5项理出来,正好是1 2 5 14 42..就猜想是catalan数,结果也是对了.公式f(i + 1) = (4?i - 6)/ i; (i >= 2).结果很大,要用高精度. 代码: import java.util.*; import java.math.*; import java.io

C - Train Problem II——(HDU 1023 Catalan 数)

传送门 Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7616    Accepted Submission(s): 4101 Problem Description As we all know the Train Problem I, the boss of the Ignatius Train

HDU 1023 Train Problem II 大数打表Catalan数

一个出栈有多少种顺序的问题.一般都知道是Catalan数了. 问题是这个Catalan数非常大,故此须要使用高精度计算. 并且打表会速度快非常多.打表公式要熟记: Catalan数公式 Cn=C(2n,n) / (n+1); 递推公式 C(n ) = C(n-1)*(4*n-2) / (n+1) 高精度乘以一个整数和高精度除以一个整数的知识.这样还是使用整数数组比較好计算,假设使用string那么就不太好计算了,由于整数也可能是多位的. const int MAX_N = 101; short

由Catalan数所引出的

百度一番: 历史 ·1758年,Johann Segner 给出了欧拉问题的递推关系: ·1838年,研究热潮: –GabrielLame给出完整证明和简洁表达式: –EugèneCharlesCatalan在研究汉诺塔时探讨了相关问题,解决了括号表达式的问题. –-- –1900年,EugenNetto在著作中将该数归功于Catalan. ·1988年以及1999年的文献研究表明实际上最初发现Catalan数的也不是Euler. –1753欧拉在解决凸包划分成三角形问题的时候,推出了Catal

Catalan数

[问题描述]对于一个栈,已知元素的进栈序列,判断一个由栈中所有元素组成的排列的出栈序列. 有N个数,则代表入栈序列为1,2,3,4,5...,N.求所有可能的出栈序列和总数. 代码如下 #include<iostream> #include<vector> #include<algorithm> #include<string> #include<stdio.h> using namespace std; int N = -1; int sum

UVA 10312 - Expression Bracketing(数论+Catalan数)

题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1253">10312 - Expression Bracketing 题意:有n个x,要求分括号,推断非二叉表达式的个数. 思路:二叉表达式的计算方法就等于是Catalan数的,那么仅仅要计算出总数,用总数减去二叉表达式个数.得到的就是非二叉表达式的个数. 那么计算方法是什么呢. 看题目中的图,对于n = 4的情况,能够分为这几种情况来讨论

poj 2352 Stars 数星星 详解

题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时则按照横坐标从小到大输出. (0 <= x, y <= 32000) 要求输出等级0到n-1之间各等级的星星个数. 分析: 这道题不难想到n平方的算法,即从纵坐标最小的开始搜,每次找它前面横坐标的值比它小的点的个数,两个for循环搞定,但是会超时. 所以需要用一些数据结构去优化,主要是优化找 横坐