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;
    }
    


  • 相关阅读:
    为什么GNU grep如此之快?
    在百度nlp实习一个月时间里用到的shell操作
    InfoPi简介、试用链接、资料索引
    自定义worker的方法,及一例
    2017.1.9版给信息源新增:max_len、max_db字段
    手把手写一个html_json信息源
    定义信息源的一些示例(xml文件)
    启用https协议的方法
    安装第三方Python模块,增加InfoPi的健壮性
    更新日志(建议升级到2017.1.18a) && 更新程序的方法
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776031.html
Copyright © 2011-2022 走看看