我是靠谱客的博主 无私小懒虫,最近开发中收集的这篇文章主要介绍HDU 下沙的沙子有几粒,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目网址:    http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=2&sectionid=3&problemid=9

分析,这题其实是H和D的组合排列问题,只不过要考虑期间累计的H和D的数量关系。

用DP来做,可以推导出:

dp[i][j] = dp[i-1][j] + dp[i][j-1]

dp[][]前一个表示H的数量,后一个表示D的数量。

分上面那种情况是因为最后一个必然是H或者D,而此时可以考虑把新加的一个放在最后,因为假如加的是H,如果加在[i-1][j]中加入H,则最后一个依然是H或D,此时如果成立,那么依然属于[i-1][j]或[i][j-1]的情况。

所以推导出此递推关系。

#include <iostream>

using namespace
std;

int
main()
{

    __int64
d[21][21];
    d[1][1] = 1;
    d[2][1] = 2;
    d[1][2] = 0;
    for
(int i = 1; i<21;i++)
        d[i][1] = i;
    for
(int i = 2;i<21;i++)
    for
(int j = 2;j<21;j++)
    {

        if
(i>=j)
        d[i][j] = d[i-1][j] + d[i][j-1];
        else
d[i][j] = 0;
    }

    int
m,n;
    while
(cin>>m>>n)
    cout<<d[m][n]<<endl;
    return
0;
}

最后

以上就是无私小懒虫为你收集整理的HDU 下沙的沙子有几粒的全部内容,希望文章能够帮你解决HDU 下沙的沙子有几粒所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部