题目链接:https://vjudge.net/problem/HDU-3723

Delta Wave

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1468    Accepted Submission(s): 483

Problem Description
A delta wave is a high amplitude brain wave in humans with a frequency of 1 – 4 hertz which can be recorded with an electroencephalogram (EEG) and is usually associated with slow-wave sleep (SWS).
-- from Wikipedia

The researchers have discovered a new kind of species called "otaku", whose brain waves are rather strange. The delta wave of an otaku's brain can be approximated by a polygonal line in the 2D coordinate system. The line is a route from point (0, 0) to (N, 0), and it is allowed to move only to the right (up, down or straight) at every step. And during the whole moving, it is not allowed to dip below the y = 0 axis.

For example, there are the 9 kinds of delta waves for N = 4:

Given N, you are requested to find out how many kinds of different delta waves of otaku.

Input
There are no more than 20 test cases. There is only one line for each case, containing an integer N (2 < N <= 10000)
Output
Output one line for each test case. For the answer may be quite huge, you need only output the answer module 10100.
Sample Input
3 4
Sample Output
4 9
Source
2010 Asia Tianjin Regional Contest
Recommend
zhouzeyong

题意:

从(0,0)走到(n,0), 要求:每一步在水平方向上向右走一格,在竖直方向上可以向上走一格、向下走一个、不走。而且路线不能够穿过X轴,问:有多少种符合要求的路线?

题解:

1.可知,走多少步向上,就要多少步向下。假设有k个向上,则先选出在竖直方向上有移动的位置:C[n][2*k]

2.当选出了竖直方向有移动的位置之后,就容易得出这是一个卡特兰数。而h[k] = C[2*k][k] / (k+1)。

3. 而k的取值范围为:0~n/2,所以总共有 sigma(C[n][2*k]*C[2*k][k]/(k+1)) 0<=k<=n/2。然而,题目中n的范围为1e4,用这条计算公式,需要O(n^2)来预处理C[][],故而超时,那怎么办?

3.1 设a[k] = C[k][2*k]*C[2*k][k]/(k+1), 则 a[k-1] = C[n][2*k-2]*C[2*k-2][k-1]/k,通过通过推导,得到:a[k] = a[k-1] * (n-2*k+1) * (n-2*k+1) / (k*(k+1)) 。这样就得出一条线性递推的式子。

3.2 所以总共有 sigma(a[k])种情况, 0<=k<=n/2。

代码如下:

 1 import java.util.Scanner;
 2 import java.math.BigInteger;
 3
 4 public class Main {
 5
 6     public static void main(String[] args){
 7
 8         BigInteger[] a = new BigInteger[10010];
 9         Scanner input = new Scanner(System.in);
10         while(input.hasNext()){
11             int n = input.nextInt();
12
13             a[0] = BigInteger.ONE;
14             for(int i = 1; i<=n/2; i++) {
15                 a[i] = a[i-1].multiply(BigInteger.valueOf((n-2*i+1)*(n-2*i+2)));
16                 a[i] = a[i].divide(BigInteger.valueOf(i*(i+1)));
17             }
18
19             BigInteger ans = BigInteger.ZERO;
20             for(int i = 0; i<=n/2; i++) {
21                 ans = ans.add(a[i]);
22             }
23             System.out.println(ans.mod(BigInteger.TEN.pow(100)));
24         }
25     }
26 }

View Code

转载于:https://www.cnblogs.com/DOLFAMINGO/p/8330186.html

HDU3723 Delta Wave —— 卡特兰数相关推荐

  1. HDU 3723 Delta Wave(卡特兰数+大数)

    题意:从坐标(0, 0)到(n, 0)的折线,这条折线每向右延伸一个单位长度,高度要么不变,要么+1,要么-1,(不能到y=0以下)已知n,求这种折线种数 思路:我们知道上升和下降的次数要一样,而这就 ...

  2. 卡特兰数 (hdu3723 Delta Wave)

    初次接触组合数学,比赛做到了卡特兰数,看了看大牛的博客,算是初步了解了一下 dalao博客:http://www.cppblog.com/MiYu/archive/2010/08/07/122573. ...

  3. 错排、卡特兰数、斯特林数小结

    一. 错排 1.计算公式: 1) D[n] = (n-1)*(D[n-1]+D[n-2]) ,n>=2, D[0] = 1, D[1] = 0 . 解释:对于第n个要加入错排的数,它可以和已经错 ...

  4. HDU 3723 Delta Wave(默慈金数)

    传送门 Delta Wave Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  5. Catalan Numbers 卡特兰数

    卡特兰数源于组合数学,递推式为 H[1] = 1:H[n] = H[n-1]*(4*n-2)/(n+1){n>=2}: 卡塔兰数的渐近增长为 下面给出几个求卡特兰数的公式,用h(n)表示卡特兰数 ...

  6. 【算法讲11:卡特兰数】默慈金数 | 那罗延数 | 施罗德数

    [算法讲11:卡特兰数]默慈金数 | 那罗延数 | 施罗德数 ⌈\lceil⌈卡特兰数⌋\rfloor⌋Catalan Number 引入 思考 ⌈\lceil⌈卡特兰数⌋\rfloor⌋的性质 ⌈\ ...

  7. HDU 3723 Delta Wave

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3723 Delta Wave Time Limit: 6000/3000 MS (Java/Others ...

  8. 《组合数学》——卡特兰数

    我们结合一个题目具体看看Catalan数的应用.(Pr0blem source:hdu2067) Problem Description 小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己 ...

  9. [BZOJ4001] [TJOI2015] 概率论 [期望计数] [卡特兰数打表 / 生成函数广义二项式定理]

    [Link\frak{Link}Link] 预备结论们 卡特兰数 Cn=(2nn)−(2nn±1)C_n={2n\choose n}-{2n\choose n\pm1}Cn​=(n2n​)−(n±12 ...

最新文章

  1. 看看大网站到底是如何保障网络安全的
  2. iOS UITableView长按cell复制内容
  3. js粘贴板为什么获取不到图片信息_JavaScript 学习笔记(3):图片库
  4. lua与python结合_Lua和Python:实现一个高效的List对象(3)
  5. 微信浏览器打开网页被拦截了?Mindjump快速解决微信屏蔽网址用户打不开的难题...
  6. 每个人都必须阅读的10篇Java文章
  7. redis java 缓存服务器_java中对Redis的缓存进行操作
  8. 解决Error: ENOENT: no such file or directory, scandir ‘xxx\node-sass\vendor‘
  9. NV16 转 NV12
  10. ads2011射频电路设计与仿真实例
  11. 计算机网络体系结构图解
  12. python计算2的n次方_python求n次方
  13. linux系统学文档pdf,Linux操作系统学习.pdf
  14. 输入英文句子,导出英语单词个数和英文字母个数 Python
  15. 使用命令结束Linux系统
  16. LWP::UserAgent的用法
  17. 解决Commend 'ifconfig' not found , but can be installed whith............ifconfig不能查看ip问题
  18. AI 图像识别的测试
  19. Vue最常见的面试题以及答案
  20. AE影视后期之跳跃音符制作

热门文章

  1. 易语言D3DHook
  2. 西安电子科技大学电子工程学院卓越计划保研经验贴
  3. html文章font-family字体集合
  4. 从DIY想到的面向对象的思想
  5. TypeScript设计模式之策略、模板方法
  6. c#调用华为北向接口--HTTPS
  7. Brocade-FC交换机–开局
  8. BD和DVD区域划分
  9. 2021年全球与中国集成抽油烟机行业市场规模及发展前景分析
  10. Open vSwitch详解