(hdu step 2.3.7)下沙的沙子有几粒?(简单DP:求有m个H,n和D,且任意索引上H的个数都要比D的个数多的方案数)
来源:互联网 发布:凯立德优化内存 编辑:程序博客网 时间:2024/06/04 18:35
在写题解之前给自己打一下广告哈~。。抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下:
http://edu.csdn.net/course/detail/209
题目:
下沙的沙子有几粒?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 894 Accepted Submission(s): 505Problem Description
2005年11月份,我们学校参加了ACM/ICPC 亚洲赛区成都站的比赛,在这里,我们获得了历史性的突破,尽管只是一枚铜牌,但获奖那一刻的激动,也许将永远铭刻在我们几个人的心头。借此机会,特向去年为参加ACM亚洲赛而艰苦集训了近半年的各位老队员表示感谢。
实际上,除了获奖以外,在这次比赛期间还有一件事也让我们记忆深刻。那是比赛当天等待入场的时候,听到某个学校的一个队员在说:“有个学校的英文名很有意思,叫什么Hangzhou Dianzi University”. 哈哈,看来我们学校的英文名起的非常好,非常吸引人呀。
不过,事情的发展谁也没有料到,随着杭电英文校名的这一次曝光,影响越来越大,很多人开始对杭电英文校名进行研究,不久以后甚至还成立了一个专门的研究机构,叫做“HDU 校名研究会”。并不断有报道说-相-当-多的知名科学家改行,专门对该问题进行研究,学术界称之为“杭电现象”。很多人在国际知名期刊上发表了研究论文,这其中,尤以中国超级女科学家宇春小姐写的一篇研究报告最为著名,报告发表在science上,标题是“杭电为什么这样红?” 文中研究发现:Hangzhou Dianzi University这个校名具有深刻的哲学思想和内涵,她同时提出了一个大胆的猜想:“假定一个字符串由m个H和n个D组成,从左到右扫描该串,如果字符H的累计数总是不小于字符D的累计数,那么,满足条件的字符串总数就恰好和下沙的沙粒一样多。”
这就是当今著名的“宇春猜想”!
虽然还没能从数学上证明这个猜想的正确性,但据说美国方面在小布什的亲自干预下,已经用超级计算机验证了在(1<=n<=m<=1000000000000)时都是正确的。my god! 这是一个多么伟大的猜想!虽然我们以前总说,21世纪是属于中国的,可还是没想这一天来的这么早,自豪ing... + 感动ing...
感动和自豪之余,问题也来了,如果已知m和n的值,请计算下沙的沙粒到底有多少。
Ps:
1. 中国有关方面正在积极行动,着手为宇春小姐申报诺贝尔奖。
2、“宇春猜想”中提到的H和D组成的字符串现在被学术界成为“杭电串串”(“杭电串串”前不久被一个卖羊肉串的注册了商标,现在我校正在积极联系买断,据说卖方的底价是1000万欧元,绝不打折,看来希望不大,sigh...)
实际上,除了获奖以外,在这次比赛期间还有一件事也让我们记忆深刻。那是比赛当天等待入场的时候,听到某个学校的一个队员在说:“有个学校的英文名很有意思,叫什么Hangzhou Dianzi University”. 哈哈,看来我们学校的英文名起的非常好,非常吸引人呀。
不过,事情的发展谁也没有料到,随着杭电英文校名的这一次曝光,影响越来越大,很多人开始对杭电英文校名进行研究,不久以后甚至还成立了一个专门的研究机构,叫做“HDU 校名研究会”。并不断有报道说-相-当-多的知名科学家改行,专门对该问题进行研究,学术界称之为“杭电现象”。很多人在国际知名期刊上发表了研究论文,这其中,尤以中国超级女科学家宇春小姐写的一篇研究报告最为著名,报告发表在science上,标题是“杭电为什么这样红?” 文中研究发现:Hangzhou Dianzi University这个校名具有深刻的哲学思想和内涵,她同时提出了一个大胆的猜想:“假定一个字符串由m个H和n个D组成,从左到右扫描该串,如果字符H的累计数总是不小于字符D的累计数,那么,满足条件的字符串总数就恰好和下沙的沙粒一样多。”
这就是当今著名的“宇春猜想”!
虽然还没能从数学上证明这个猜想的正确性,但据说美国方面在小布什的亲自干预下,已经用超级计算机验证了在(1<=n<=m<=1000000000000)时都是正确的。my god! 这是一个多么伟大的猜想!虽然我们以前总说,21世纪是属于中国的,可还是没想这一天来的这么早,自豪ing... + 感动ing...
感动和自豪之余,问题也来了,如果已知m和n的值,请计算下沙的沙粒到底有多少。
Ps:
1. 中国有关方面正在积极行动,着手为宇春小姐申报诺贝尔奖。
2、“宇春猜想”中提到的H和D组成的字符串现在被学术界成为“杭电串串”(“杭电串串”前不久被一个卖羊肉串的注册了商标,现在我校正在积极联系买断,据说卖方的底价是1000万欧元,绝不打折,看来希望不大,sigh...)
Input
输入数据包含多个测试实例,每个占一行,由两个整数m和n组成,m和 n 分别表示字符串中H和D的个数。由于我们目前所使用的微机和老美的超级计算机没法比,所以题目给定的数据范围是(1<=n<=m<=20)。
Output
对于每个测试实例,请输出下沙的沙粒到底有多少,计算规则请参考“宇春猜想”,每个实例的输出占一行。
Sample Input
1 13 1
Sample Output
13
Author
lcy
Source
HDU 2006-4 Programming Contest
Recommend
lxj
题目大意:
就是给你m个H和n个D,然后从左开始数H的累积个数总是不比D的累计数少的排列有多少种举一个测试案例吧:3个H和1个D总共有3种排列,依次是:H D H H,H H D H,H H H D三种排列,
题目分析:
简单DP。题目一开始又扯了一大堆有的没的。。。。。。其实题目就是说“有m个H,n个D,且任意索引上H的个数都不小于D的个数,问这样的方案数有多少种”。
递推公式是: a[m][n] = a[m-1][n] + a[m][n-1] 。前面代表的是H的个数.后面代表的是D的个数。
推导过程如下:然后当n=0的时候无论m取何值都是1,递推公式怎么推来的呢?我现在说下我的思路吧!假设3个H和2个D是由2个H和2个D还有3个H一个D推来的,2个H和2个D总共有H D H D,H H D D两种排列,3个H和一个D总共有H D H H,H H D H,H H H D三种排列,然后在H D H D,H H D D的后面添加一个H就是2中排列,在H D H H,H H D H,H H H D的后面添加一个D就有3种方案,所以总共就是5种方案(其它的添加方法都是重复的,不信的话自己可以试一下)
代码如下:
/* * d.cpp * * Created on: 2015年2月4日 * Author: Administrator */#include <iostream>#include <cstdio>using namespace std;const int maxn = 21;long long a[maxn][maxn];void prepare() {int i;for (i = 0; i < maxn; ++i) {a[i][0] = 1;//当D的个数为0时,无论多少个H,它的排列数都只有一种.}//需要注意的是,这里a[0][i] = 0 .没初始化,因为默认值就是0.因为没有H,这种方案就不成立了int j;for (i = 1; i < maxn; ++i) {for (j = i; j < maxn; ++j) {a[j][i] = a[j - 1][i] + a[j][i - 1];}}}int main() {prepare();int n, m;while (scanf("%d%d", &n, &m) != EOF) {printf("%lld\n", a[n][m]);}return 0;}
1 0
- (hdu step 2.3.7)下沙的沙子有几粒?(简单DP:求有m个H,n和D,且任意索引上H的个数都要比D的个数多的方案数)
- hdu 1024 DP 求n个数m个不交叉子段的最大和
- 【二进制枚举】求在n个数中取任意个数加起来组成x的方案数
- 求n个数选m个数的组合数
- m个数分成n个数的和
- 从m个数中任意去n个数的组合
- (hdu step 3.1.7)Children’s Queue(求n个人站在一起有m个人必须是连在一起的方案数)
- 统计 (dp 求n位无前导零且数码从高到低非降并模 m等于 0的数个数 )
- Codeforces 126D Fibonacci Sums 求n由任意的Sum(fib)的方法数 dp
- m个数取n个的排列数 Cmn
- 有n个数,使前面m个变为后面的
- 求n!中因子m的个数
- 求0-n中有1的数的个数,没有1的数的个数
- 求n个中选m个的方案数(dp)
- HDU 5569 长度为n的上升子序列个数d (大数模板+DP)
- 求1到N个数中包含质因子m的数的个数
- n个数,数到m的出来。
- hdu 2566 统计硬币 母函数 硬币总个数一定 且正好用完组成m的方案数
- 浅析Spring框架下PropertyPlaceholderConfigurer类
- JAVA 基本数据类型长度
- 为数据库生成表的改动日志
- spring mvc使用ehcache
- 小波变换和motion信号处理(一)
- (hdu step 2.3.7)下沙的沙子有几粒?(简单DP:求有m个H,n和D,且任意索引上H的个数都要比D的个数多的方案数)
- [C++]LeetCode: 131 Trapping Rain Water (双边扫描)
- aeroo报表使用指南
- 设置状态栏
- 语音分享应用源码项目
- Android Handler机制
- 三层数据库四大法宝之“删”
- sqlite入门基础(一):sqlite3_open,sqlite3_exec,slite3_close
- js call