一个出栈有多少种顺序的问题。一般都知道是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[MAX_N][MAX_N];//catlans[i][0] save the length void calCatalans()
{
short carry = 0, len = 1;
catalan[1][0] = 1; catalan[1][1] = 1;
catalan[2][0] = 1; catalan[2][1] = 2;
for (int i = 3; i < MAX_N; i++)
{
carry = 0;
for (int j = 1; j <= len; j++)//高精度乘以一个整数
{
short sum = catalan[i-1][j]*((i<<2)-2) + carry;
carry = sum / 10;
catalan[i][j] = sum % 10;
}
while (carry)
{
catalan[i][++len] = carry % 10;
carry /= 10;
}
for (int j = len; j > 0; j--)//高精度除以一个整数
{
short sum = catalan[i][j] + carry*10;
catalan[i][j] = sum / (i+1);
carry = sum % (i+1);//一定能除尽。故此无需考虑余数情况
}
while (catalan[i][len] == 0) len--;
catalan[i][0] = len;
}
} int main()
{
calCatalans();
int n;
while (~scanf("%d", &n))
{
for (int i = catalan[n][0]; i > 0; i--)
{
printf("%d", catalan[n][i]);
}
putchar('\n');
}
return 0;
}

HDU 1023 Train Problem II 大数打表Catalan数的更多相关文章

  1. HDU 1023 Train Problem II (大数卡特兰数)

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. hdu 1023 Train Problem II

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1212 Train Problem II Description As we all know the ...

  3. HDU 1023 Train Problem II( 大数卡特兰 )

    链接:传送门 题意:裸卡特兰数,但是必须用大数做 balabala:上交高精度模板题,增加一下熟悉度 /************************************************ ...

  4. HDU 1023 Train Problem II (卡特兰数,经典)

    题意: 给出一个数字n,假设火车从1~n的顺序分别进站,求有多少种出站序列. 思路: 卡特兰数的经典例子.n<101,用递推式解决.需要使用到大数.n=100时大概有200位以下. #inclu ...

  5. HDU 1023 Traning Problem (2) 高精度卡特兰数

    Train Problem II Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Sub ...

  6. 1023 Train Problem II(卡特兰数)

    Problem Description As we all know the Train Problem I, the boss of the Ignatius Train Station want ...

  7. HDOJ 1023 Train Problem II 卡特兰数

    火车进站出站的问题满足卡特兰数...卡特兰数的相关知识如下: 卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. ...

  8. HDOJ 1023 Train Problem II

    考虑第1个火车出站的时刻,从1到n都有可能,如果它是第i个出栈,那么前面有规模为i-1的子问题,后面有规模为n-i的子问题.累加.

  9. Train Problem II(卡特兰数 组合数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1023 Train Problem II Time Limit: 2000/1000 MS (Java/ ...

随机推荐

  1. MAX II Device Compatibility with 5.0-V CMOS Devices

    http://www.altera.com/literature/hb/max2/max2_mii51009.pdf The open-drain pin never drives high, onl ...

  2. linux下面mmap和setsignal函数用法

    #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #include <fcntl.h& ...

  3. 国产Linux滋生腐败

    回想过去,2002年12月11日至12日,信息产业部与科技部联合主办"Linux软件与应用猜測研讨会".影响中国IT业的重要人士,包含政府决策者.学界权威.主要Linux推动厂商等 ...

  4. SpringMVC和Springboot的区别(网摘)

    spring boot 我理解就是把 spring spring mvc spring data jpa 等等的一些常用的常用的基础框架组合起来,提供默认的配置,然后提供可插拔的设计,就是各种 sta ...

  5. arcgis python添加几何属性

    import arcpy import numpy import math def AddGeometryAttributes(fc, geomProperties, lUnit, aUnit, cs ...

  6. 学习Android Studio里的Gradle

    一直听说Gradle很强大,只是偶尔用Android Studio创建Demo的时候看到他一次,今天抽个时间完整记录一下. 1.gradle位置 Android Studio项目创建好之后,默认有3个 ...

  7. 通过使用第三方开源jar包sigar.jar我们可以获得本地的信息

    1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到java路径.比如windows32位操作系统需要将lib中sigar ...

  8. [翻译] MCProgressView 使用自定义图片做进度显示

    MCProgressView 使用自定义图片做进度显示 https://github.com/Baglan/MCProgressView Progress bar view with custom i ...

  9. 《SEO深度解析——全面挖掘搜索引擎优化的核心秘密》

    <SEO深度解析——全面挖掘搜索引擎优化的核心秘密> 基本信息 作者: 痞子瑞 出版社:电子工业出版社 ISBN:9787121224041 上架时间:2014-2-28 出版日期:201 ...

  10. easyui 排序实现

    1.对easyui  datagrid 返回的数据,进行排序处理,便于搜索到我们的有用的信息. 例如: 2.datagrid 需要设置 sortable : true { field : 'crtTi ...