• 爬楼梯与未名湖的烦恼


    问题描述
    每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。

    每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)

    输入格式
    两个整数,表示m和n

    输出格式
    一个整数,表示队伍的排法的方案数。

    样例输入
    3 2

    样例输出
    5

    数据规模和约定
    m,n∈[0,18]

    问题分析: 首先我们要明确这个是排队问题,类比于爬楼梯问题

    //未名湖的烦恼
    #include<iostream>
    using namespace std;
    int f(int m,int n){
        if(n>m||(m<1&&n<1))  return 0;
        if(n==0) return 1;
        return f(m-1,n)+f(m,n-1);
    }
    int main()
    {
        int m,n;
        //必须满足m>=n
        cout<<f(3,2)<<endl;
    } 
    View Code

    FangAn(3,2)=FangAn(2,2)+FangAn(3,1)
    =FangAn(1,2)+FangAn(2,1) + FangAn(2,1)+FangAn(3,0)
    =0 + FangAn(1,1)+FangAn(2,0) + FangAn(1,1)+FangAn(2,0) + 1
    =0 + FangAn(0,1)+FangAn(1,0) + 1 + FangAn(0,1)+FangAn(1,0) + 1 + 1
    =0+0+1+1+0+1+1+1
    =5

    爬楼梯:

    描述
    树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数
    例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级
    也可以第一次走两级,第二次走一级,一共3种方法。

    输入
    输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30
    输出
    不同的走法数,每一行输入对应一行输出
    样例输入
    5
    8
    10
    样例输出
    8
    34
    89

    //爬楼梯
    #include<stdio.h>
    int it(int n)
    {
     if(n==1)return 1;
     else if(n==2) return 2;
     else return it(n-2)+it(n-1);
    }
    int main()
    {
     int n;
     while(scanf("%d",&n)!=EOF)
     {
    
     printf("%d
    ",it(n));
    }
    
     return 0;
    }
    View Code

    总结:两个问题都是排队问题,因变量不同,爬楼梯为一个,未名湖为两个,

  • 相关阅读:
    Socket
    利用Python自动生成暴力破解的字典
    【转】六年测试工作的思考1
    【转】手机测试入行三年的感想
    【转】移动测试人员的未来:测试开发技术的融合
    【转】一个互联网项目即将结束的软件测试经验总结
    【转】电子商务网站测试经验总结
    【转】六年软件测试感悟-从博彦到VMware
    使用PL/SQL删除百万条记录的大表
    【转】百万级数据查询优化
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10387513.html
Copyright © 2020-2023  润新知