HDU ACM 1267 下沙的沙子有几粒?->DP

题意: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][n]=DP[m-1][n]+DP[m][n-1]。另外当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种方案,其他均为重复。

注意:m<n的话排列的情况不存在,则为0。

#include<iostream>
using namespace std;

int main()
{
	__int64 a[21][21];
	int m,n,i,j;

	memset(a,0,sizeof(a));
	for(i=1;i<=20;i++) //当n为0的时候无论m如何取何值都是1
		a[i][0]=1;

	for(i=1;i<=20;i++)
		for(j=i;j<=20;j++)
			a[j][i]=a[j-1][i]+a[j][i-1];

	while(cin>>m>>n)
	{
		printf("%I64d\n",a[m][n]);
	}
    return 0;
}
时间: 2024-10-07 19:17:44

HDU ACM 1267 下沙的沙子有几粒?->DP的相关文章

hdu 1267 下沙的沙子有几粒? (递推)

下沙的沙子有几粒? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2584    Accepted Submission(s): 1346 Problem Description 2005年11月份,我们学校参加了ACM/ICPC 亚洲赛区成都站的比赛,在这里,我们获得了历史性的突破,尽管只是一枚铜牌,但获奖那一刻的激动,也许将永远铭刻

hdu 1267 下沙的沙子有几粒?(二维递推题)

题意:就是给你m个H和n个D,然后从左开始数H的累积个数总是不比D的累计数少的排列有多少种举一个测试案例吧:3个H和1个D总共有3种排列,依次是:H D H H,H H D H,H H  H D三种排列,亲~意思应该懂了吧?!呵呵... 思路:递推公式为:a[m][n]=a[m-1][n]+a[m][n-1];然后当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

(hdu step 2.3.7)下沙的沙子有几粒?(简单DP:求有m个H,n和D,且任意索引上H的个数都要比D的个数多的方案数)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在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): 505   Problem Descri

下沙的沙子有几粒?(杭电1267)

下沙的沙子有几粒? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2823    Accepted Submission(s): 1480 Problem Description 2005年11月份,我们学校参加了ACM/ICPC 亚洲赛区成都站的比赛,在这里,我们获得了历史性的突破,尽管只是一枚铜牌,但获奖那一刻的激动,也许将永远铭

下沙的沙子有几粒?(hdu1267)递推

下沙的沙子有几粒? Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 1   Accepted Submission(s) : 1 Problem Description 2005年11月份,我们学校参加了ACM/ICPC 亚洲赛区成都站的比赛,在这里,我们获得了历史性的突破,尽管只是一枚铜牌,但获奖那一刻的激动,也许将永远铭刻在我们几个人的

HDU1267 下沙的沙子有几粒?【找规律】

下沙的沙子有几粒? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2846    Accepted Submission(s): 1493 Problem Description 2005年11月份,我们学校参加了ACM/ICPC 亚洲赛区成都站的比赛,在这里,我们获得了历史性的突破,尽管只是一枚铜牌,但获奖那一刻的激动,也许将永远铭

HDU ACM 1292 &quot;下沙野骆驼&quot;ACM夏令营-&gt;DP

解析:一支队伍分组的情况,如果这支队伍有n个人,就有n种情况分别是一个组,两个组,......: i个人分成j组有两种方式: 1.i-1个人分成j-1组之后,第i个人独立分成一组:DP[i][j]=DP[i-1][j-1]. 2.i-1个人分成j组,第i个人随便加入j组中的任何一组:DP[i][j]=DP[i-1][j]*j. 3.因此状态转移方程为DP[i][j]=DP[i-1][j-1]+DP[i-1][j]*j. #include<iostream> using namespace st

HDU 3853 向下向右找出口问题-期望dp

题意:初始状态在(1,1)的位置,目标是走到(n,n),每次只能向下向右或者不移动,已知在每个格子时这三种情况的概率,每移动一步消耗2的魔力,求走到终点的使用的魔力的期望. 分析:简单的期望dp,套用之前的框架,但是这题不是+1,而是+2,因为每次多加的那个数字是走一步的消耗,这里是2!注意p1[i][j]==1时不能计算dp[i][j],看式子就知道了,分母不能为0. 代码: #include<iostream> #include<cstdio> using namespace

HDU ACM 4504 威威猫系列故事——篮球梦-&gt;DP

分析:d[i][j]表示前i回合获得j分的方法数. d[i][j]=d[i-1][j-1]+d[i-1][j-2]+d[i-1][j-3]. 我方最多进攻20次,每次得3分,最多20*60的状态量. #include<iostream> using namespace std; //dp[i][j]代表我方第i轮获得j分的种类数 __int64 dp[26][70]; //最大600s,600/15=40,40/2=20,最多20轮,最多得分20*3. void Init() //初始打表 {