zoukankan      html  css  js  c++  java
  • 算法训练 未名湖边的烦恼

      算法训练 未名湖边的烦恼  
    时间限制:1.0s   内存限制:256.0MB
       
    问题描述
      每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。
      每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)
    输入格式
      两个整数,表示m和n
    输出格式
      一个整数,表示队伍的排法的方案数。
    样例输入
    3 2
    样例输出
    5
    数据规模和约定
      m,n∈[0,18]
      问题分析


    思路:

    没有感觉特别大的障碍,读题费了点功夫。要注意一句话:(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)

    可以理解为只有m人还鞋,没有人租鞋的时候,无论这m个人怎么排列都只看作一种方案

    递推方程很好写:dp[i][j]=dp[i-1][j]+dp[i][j-1],还鞋或者租鞋的人减少一个状态相加得来

    代码:

    #include<iostream>
    #include<string>
    #include<cstring>
    using namespace std;
    const int MAXN=19;
    int dp[MAXN][MAXN];
    void init()
    {
        memset(dp,0,sizeof(dp));
        for(int i=0;i<MAXN;i++)
            dp[i][0]=1;//(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)所以不用求阶乘了+_+,想的有点多
        for(int i=1;i<MAXN;i++)
        {
            for(int j=1;j<MAXN;j++)
            {
                if(i>=j)
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        }
    }
    int main()
    {
        init();
        int m,n;
        scanf("%d%d",&m,&n);
        printf("%d
    ",dp[m][n]);
        return 0;
    }
    


  • 相关阅读:
    JQuery.Gantt(甘特图)开发
    文件上传利器SWFUpload入门简易教程
    ES6:JavaScript 新特性
    记一次关于垃圾回收app的推广成功案例
    c#游戏之路-wpf版本开发
    C#游戏之路-winform,wpf,directx,opengl的了解
    Python3 引号
    while循环练习
    用jquery实现瀑布流(方式1-固定宽度和列数,按顺序添加图片)
    jquery实现图片轮播淡入淡出效果
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776031.html
Copyright © 2011-2022 走看看