HDU3723 Delta Wave —— 卡特兰数
题目链接: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
-- 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.
4
9
题意:
从(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。
代码如下:
import java.util.Scanner;
import java.math.BigInteger; public class Main { public static void main(String[] args){ BigInteger[] a = new BigInteger[10010];
Scanner input = new Scanner(System.in);
while(input.hasNext()){
int n = input.nextInt(); a[0] = BigInteger.ONE;
for(int i = 1; i<=n/2; i++) {
a[i] = a[i-1].multiply(BigInteger.valueOf((n-2*i+1)*(n-2*i+2)));
a[i] = a[i].divide(BigInteger.valueOf(i*(i+1)));
} BigInteger ans = BigInteger.ZERO;
for(int i = 0; i<=n/2; i++) {
ans = ans.add(a[i]);
}
System.out.println(ans.mod(BigInteger.TEN.pow(100)));
}
}
}
HDU3723 Delta Wave —— 卡特兰数的更多相关文章
- uva 1478 - Delta Wave(递推+大数+卡特兰数+组合数学)
option=com_onlinejudge&Itemid=8&category=471&page=show_problem&problem=4224" st ...
- hdu1032 Train Problem II (卡特兰数)
题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能. (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...
- 卡特兰数(Catalan)
卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 2, ...
- NOIP2003pj栈[卡特兰数]
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...
- 卡特兰数 (Catalan)
卡特兰数:(是一个在计数问题中出现的数列) 一般项公式: 1. 或 2. 递归公式: 1. 或 2. 注:全部可推导. (性质:Cn为奇数时,必然出现在奇数项 2k- ...
- HDU 5673 Robot ——(卡特兰数)
先推荐一个关于卡特兰数的博客:http://blog.csdn.net/hackbuteer1/article/details/7450250. 卡特兰数一个应用就是,卡特兰数的第n项表示,现在进栈和 ...
- HDU 1023 Traning Problem (2) 高精度卡特兰数
Train Problem II Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Sub ...
- HDU1130 卡特兰数
How Many Trees? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- LightOJ1170 - Counting Perfect BST(卡特兰数)
题目大概就是求一个n个不同的数能构造出几种形态的二叉排序树. 和另一道经典题目n个结点二叉树不同形态的数量一个递推解法,其实这两个问题的解都是是卡特兰数. dp[n]表示用n个数的方案数 转移就枚举第 ...
随机推荐
- 前端笔记之Vue(七)Vue-router&axios&Vue插件&Mock.js&cookie|session&加密
一.Vue-router(路由) 1.1路由创建 官网:https://router.vuejs.org/zh/ 用 Vue.js + Vue Router 创建单页应用,是非常简单的.使用 Vue. ...
- session再次理解
1.session介绍: session主要用来存储用户的会话所需的信息(用户行为信息),当用户在同一个服务器上实现不同的操作时,session信息会以变量的形式存储在服务器的内存中,保存用户的状态信 ...
- 正确使用Block避免Cycle Retain和Crash
Block简介 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支持GC机制,使用Block必须自己管理内存 ...
- ES6新语法学习
参考: 1.http://es6.ruanyifeng.com/#docs/let#let-命令 2.https://reactjs.org/tutorial/tutorial.html 3.http ...
- LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)
翻译 给定两个字符串s和t,决定它们是否是同构的. 假设s中的元素被替换能够得到t,那么称这两个字符串是同构的. 在用一个字符串的元素替换还有一个字符串的元素的过程中.所有字符的顺序必须保留. 没有两 ...
- 【Caffe代码解析】compute_image_mean
功能: 计算训练数据库的平均图像. 由于平均归一化训练图像会对结果有提升,所以Caffe里面,提供了一个可选项. 用法: compute_image_mean [FLAGS] INPUT_DB [OU ...
- 程序猿的量化交易之路(30)--Cointrader之ConfigUtil(17)
转载须注明出处:viewmode=contents">http://blog.csdn.net/minimicall?viewmode=contents.http://cloudtra ...
- mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
http://www.blogjava.net/jiangshachina/archive/2009/05/31/279288.html 酷壳 - MySQL: InnoDB 还是 MyISA ...
- 自己定义struts2中action类型转换器
DateAction.java中代码例如以下: package com.itheima.action; import java.util.Date; public class DateAction { ...
- 如何成为一个Linux内核开发者
你想知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动.“这篇文档的目的,就是通过描述你需要 经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所 ...