zoukankan      html  css  js  c++  java
  • HDU4828 Grids 2014百度之星预赛问题解决

    看看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:
    %I64d
    ", t, Catalan[num]);
    	}
    	return 0;
    }



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

  • 相关阅读:
    剖析下聊天室
    PHP与Nginx之间的运行机制以及原理
    Nginx源码结构
    Nginx初始化过程总结
    Nginx架构解析
    KMP && KMP求字符串循环节
    IOS开发之 ---- 苹果系统代码汉字转拼音
    jQuery--表单的过滤
    jQuery--子元素过滤
    存储过程 psal emp.sal%type是什么意思
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4913389.html
Copyright © 2011-2022 走看看