看看Catalan数的公式:为 Catalan(n) = C(2n, n) / n+1 = C(2n, n) - C(2n, n-1); (公式0)

然后利用全排序表达:Catalan(n) = (2n)! / (n+1) * (n)!*n!;

那么Catalan(n-1) = (2(n-1))! / n * (n-1)!(n-1)!;

然后两者相除就得到:Catalan(n) = (4*n-2) / (n+1)
(公式1)//这个就是递归的终极公式了。

一般使用动态规划的递推公式是:Catalan(n) = Catalan(0) * Catalan(n-1) + Catalan(1) * Catalan(n-2) + ... + Catalan(n-1) * Catalan(0);(公式2)

公式1自然比公式2快上一个档次了。

曾经仅仅会用公式2,使用动态规划或者公式0去做,速度自然慢了。

这就这道题目的要诀了。羞愧啊,当时竟然没做出来,由于当时数学水平没跟上。经过一个多月的学习数学,參考了一下网上的程序。最终开窍了。

只是安慰下自己,就是当时做出来的人好像才200人多一点,并且资格赛四道题也只是200人多点做出来的,恰好我做完了。

算法高手究竟有多少呢?不少,也不多。-- 废话。

呵呵。给大家一个衡量的大概尺度。能够把这道题做出来的人应该能够说是高手了,起码数学这块过关了。

记得一个好像是什么外国语学院的。竟然几分钟做出来了。还是外国语学院的,难倒是英语高手+算法高手,厉害。

当然我也是英语高手,呵呵。

扯远了,最后是所谓乘法逆元问题,能够套模板程序了。要知道推导能够參考组合数学书。

就是GCD扩展的算法。扩展之后的系数就是乘法逆元了。

#include <stdio.h>

const int N = 1000001;
const long long MOD = (long long)1E9 + 7LL;
long long g; void extGCD(long long a,long long b,long long &x,long long &y)
{
if(b == 0)
{
x = 1, y = 0;
g = a;
return ;
}
extGCD(b, a % b, y, x);
y -= a / b * x;
} long long modReverse(long long a, long long n)
{
long long x, y;
extGCD(a, n, x, y);
return (x + n) % n;
} long long Catalan[N]; //0 1 2 3 4 5 6 7 8 9 10 11 12
void genCatalan() //1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012
{
Catalan[0] = Catalan[1] = 1LL;
for (int i = 2; i < N; i++)
{
long long tmp = modReverse(i+1LL, MOD);
Catalan[i] = Catalan[i - 1] * ((i<<2) - 2) % MOD * tmp % MOD;
}
} int main()
{
genCatalan();
int T, num;
scanf("%d", &T);
for (int t = 1; t <= T; t++)
{
scanf("%d", &num);
printf("Case #%d:\n%I64d\n", t, Catalan[num]);
}
return 0;
}

版权声明:笔者靖心脏,景空间地址:http://blog.csdn.net/kenden23/,只有经过作者同意转载。

HDU4828 Grids 2014百度之星预赛问题解决的更多相关文章

  1. 2014百度之星预赛(第二场)——Best Financing

    2014百度之星预赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理財产品达到收益最大化.已知小A在未来一段时间中的收入情况,描写叙述为两个 ...

  2. 2014百度之星资格赛——Disk Schedule

    2014百度拥有明星格比赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取. 为了提高效率.须要人为安排磁盘读取. 然而.在 ...

  3. 2014百度之星初赛第二场hdu 4831 Scenic Popularity

    Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  4. 2014 百度之星 题解 1004 Labyrinth

    Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...

  5. 2014百度之星资格赛 1004:Labyrinth(DP)

    Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. 2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)

    Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. 2014 百度之星题解 1002 - Disk Schedule

    Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景. 磁盘 ...

  8. 2014百度之星第四题Labyrinth(DP)

    Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. 2014百度之星第三题Xor Sum(字典树+异或运算)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

随机推荐

  1. Java Tread多线程(0)一个简单的多线程实例

    作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39341887 本文演示,一个简单的多线程实例,并简单分析一下线程. 编程多 ...

  2. java 注解 学习

    周末闲来无事,想要研究一下注解方面的知识,曾经看过几次,都忘记了,这次学习下,而且写篇文章记录下, 1.元注解  元注解是指注解的注解.包含 @Retention @Target @Document ...

  3. NAT( 网络地址转换) 实现

    NAT基本介绍: 网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术.是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型 ...

  4. 创建Oracle的用户 create user scott identified by tiger;

    在命令行里sqlplus 以system身份登录,password是自己设的system C:\Users\Administrator>sqlplus SQL*Plus: Release 10. ...

  5. javascript中的三角学

    三角学主要研究三角形和它们的边角关系,包含一个90度角的三角形被称为直角三角形.在这里主要研究直角三角形相关的知识. 1. 角度和弧度 360(角度) = 2*Math.PI(弧度) degrees ...

  6. 获取activity的根视图

    Activity的根视图是什么? Activity所谓的根视图,就是Activity的最底层的View,也就是在Acitivty创建的时候setContentView的时候传入的View. 如何获取到 ...

  7. Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)

    最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...

  8. mybatis以序列周期,同样处理的这个问题的价值

    原因猜测缓存,由于代码是肯定没问题,但无论怎么查都一样值 <select id="querySeq" resultType="java.lang.Long" ...

  9. Java版网络爬虫基础(转)

    网络爬虫不仅仅可以爬取网站的网页,图片,甚至可以实现抢票功能,网上抢购,机票查询等.这几天看了点基础,记录下来. 网页的关系可以看做是一张很大的图,图的遍历可以分为深度优先和广度优先.网络爬虫采取的广 ...

  10. OpenCV(C++接口)学习笔记1-图像读取、显示、保存

    OpenCV在2.0加入版本号之后C++接口函数,学习前C语言的接口功能.现在OpenCV它已被发展到2.4.9版本号,所以,我决定学习C++接口函数,与步伐. 1.创建图像 cv::Mat imag ...