递推,大数存储E - Order Count
Description
1) A=B=C
2) A=B<C
3) A<B=C
4) A<B<C
5) A<C<B
6) A=C<B
7) B<A=C
8) B<A<C
9) B<C<A
10) B=C<A
11) C<A=B
12) C<A<B
13) C<B<A
If we connect n numbers with "<" and "=", how many cases then?
Input
Output
Sample Input
1
3
Sample Output
13
Hint
Hint Huge input, scanf is recommended. source:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=95378#problem/E 参考博客:http://blog.csdn.net/acm_ted/article/details/7439043 这道题需要存储的数比较大,需要存下“500!”这么大的数,c或者c++的大数不会写,java提供大数类,直接用比较方便,我现在不会,就先写下思路,以后写题
问题:输入字母个数n,用大于小于等于号把这些字母连接起来的所有情况数
注意(A = B > C)和(C < B = A)是一样的
思路:因为等于是相互的,算作一种情况,所以可以把所有相等的数分为一堆,看作一个字符
这样就只剩下大于和小于号了
由于 A > B和B < A也是一样的,所以我们可以假设只有大于号或者小于号
然后把所有的数排列一下就行了
由于分的堆的数目和每堆中的数据个数都是未知的,我们无法直接下手算i个字母连接的情况数
但是我们可以通过递推,由前一种情况逐步找到要找的情况
num[i][j]表示i个数分了j堆的连接数
那么num[i][j] = //注意最终形成了j堆, 不妨设所有的堆都是用小于号链接的
num[i-1][j-1]*j
//最后一个数独立形成一堆,num[i-1][j-1]表示在最后一个数加入之前的排列数
//那么最后一个数加入的时候,就有j个位置可以选择,所以乘以j
+num[i-1][j]*j;
//最后一个数和前面某一堆中的数据相等,加最后一个数之前的情况数为num[i-1][j]
//最后一个数入的堆可能是j堆中的任意一个,所以乘以j
其实找到状态转义方程都好说num[i][j] = (num[i-1][j-1] + num[i-1][j])*j;
初始化:num[i][j]为0;num[n][1]都为1
f(1, 1) = 1
f(2, 1) = 1, f(2, 2) = 2;
f(3, 1) = 1, f(3, 2) = 6, f(3, 3) = 6;
……
f(n, 1) = 1, ………………………………………………………………………………f(n, n) = A(n, n);
因为我们假设符号已经排好, 就把这些数填进去就行,所以我们只需要算这些数放置的方法数即可
除了f(i, 1) = 1; f(i, i) = A(i, i) (1 <= i <= n)之外,其他数都是按照我们推倒出来的公式计算的
因为n可能为500这样我们就需要存储n的阶乘,需要大数运算,看网上有人用java的大数类直接存的,
现在我还不会,先把思路了写下来,以后做
递推,大数存储E - Order Count的更多相关文章
- Tiling(递推+大数)
Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a sample tili ...
- Children’s Queue HDU 1297 递推+大数
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1297 题目大意: 有n个同学, 站成一排, 要求 女生最少是两个站在一起, 问有多少种排列方式. 题 ...
- ACM学习历程—HDU1041 Computer Transformation(递推 && 大数)
Description A sequence consisting of one digit, the number 1 is initially written into a computer. A ...
- 【hdoj_1865】1sting(递推+大数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1865 本题的关键是找递推关系式,由题目,可知前几个序列的结果,序列长度为n=1,2,3,4,5的结果分别是 ...
- poj 2506 Tiling(递推 大数)
题目:http://poj.org/problem?id=2506 题解:f[n]=f[n-2]*2+f[n-1],主要是大数的相加; 以前做过了的 #include<stdio.h> # ...
- ACM学习历程—HDU1023 Train Problem II(递推 && 大数)
Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know ...
- HDU1134/HDU1133 递推 大数 java
Game of Connections Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- Buy the Ticket HDU 1133 递推+大数
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1133 题目大意: 有m+n个人去买电影票,每张电影票50元, m个人是只有50元一张的, n个人 ...
- UVA11375火柴(递推+大数)
题意: 给你n根火柴,问你能组成多少种数字,比如3根可以组成1或者7,组成的数字中不能有前导0, 思路: 我们开一个数组,d[i]记录用i跟火柴可以组成多少种数字,则更新状态是 ...
随机推荐
- Vector(容器)
vector(容器)就像数组一样,但比数组强大很多,下面介绍一下vector常用的几种方法: 一.对于vector自身的处理,包括赋初始值,复制等等: vector<int> v1 ; v ...
- Java "==和equals区别" 示例
import java.util.Calendar; import java.util.Date; import java.util.Locale; public class test { publi ...
- php基础知识(很简单一套适合零基础的朋友学习)
红色的一般都是重点,还有自己的一些废话 运算符 算术运算符: 基本运算(除数不能为0) 比较运算符: 大小比较(类型比较), 如果两个类型不一样,系统会自动转换成统一类型 赋值运算符: 基本赋值和运算 ...
- pl/sql oracle
http://uule.iteye.com/blog/2061773(出处) 批量导入脚本: 打开一个command window > 输入@ > 它会让你选择要导入的文件 (自己要知道 ...
- python自学笔记(七)排序与多级排序
一.sorted内置方法 a = [1,2,3,4] 从大到小(翻转) a = sorted(a,reverse = True) #生成新对象,不会原地修改,需要重新赋值 print a --> ...
- C# 读书笔记之访问关键字this和base
this 关键字引用类的当前实例.静态成员方法中不能使用this关键字,this关键字只能在实例构造函数.实例方法或实例访问器中使用. base 关键字用于从派生类中访问基类的成员. 指定创建派生类实 ...
- p2.js物理引擎学习
P2简介 P2是一款基于Javascript编写的HTML5 2D物理引擎,和Box2D.Nape等2D物理引擎一样,P2集成了各种复杂的物理公式和算法,可以帮助我们轻松的实现碰撞.反弹等物理现象的模 ...
- Linux相关问题-CentOS6.5 x64版本号下Tomcat无法自启动的解决的方法
前段时间使用阿里云server.使用的是Linux CentOS6.5系统,在搭建完Tomcat后发现,Tomcat无法自启动. 将启动tomcat的命令为tomcat_home/bin/startu ...
- JavaScript推断E-mail地址是否合法
编写自己定义的JavaScript函数checkEmail(),在该函数中首先推断E-mail文本框是否为空,然后在应用正則表達式推断E-mail地址是否合法,假设不合法提示用户 <script ...
- IOS_OC_id ,NSObject, id<NSObject>差别
我们常常会混淆下面三种申明(我是没有留意过): 1. id foo1; 2. NSObject *foo2; 3. id<NSObject> foo3; 第 ...