目录

1 问题描述

2 解决方案

2.1 递归法

2.2 递推法

 


1 问题描述

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

2 解决方案

2.1 递归法

共有m个人还鞋,n个人借鞋,记最终排列数为f(m, n)。

现在求m和n的排队情况,具体理解如下:

起始,要去一人还鞋(PS:此时,m = m - 1),还完后,可以选一人还鞋(PS:m = m - 1)或者一人借鞋(PS:n = n - 1)。

那么,f(m , n) = f(m - 1, n) + f(m, n - 1)。这就是求取f(m, n)的递推公式,那么轻易可知当m < n时,f(m, n) = 0;当n = 0时,f(m, 0) = 1。

具体代码如下:

package com.liuzhen.systemExe;import java.util.Scanner;public class Main{//m代表还鞋的人数,n代表借鞋的人数public int getArrange(int m, int n) {if(m < n)return 0;if(n == 0)return 1;return getArrange(m - 1, n) + getArrange(m, n - 1);}public static void main(String[] args){Main test = new Main(); Scanner in = new Scanner(System.in);//    System.out.println("请分别输入还鞋人数m和和借鞋人数n:");int m = in.nextInt();int n = in.nextInt();System.out.println(test.getArrange(m, n));}
}

运行结果:

请分别输入还鞋人数m和和借鞋人数n:
3 2
5请分别输入还鞋人数m和和借鞋人数n:
12 7
23256

2.2 递推法

具体代码如下:

package com.liuzhen.systemExe;import java.util.Scanner;public class Main{//m代表还鞋的人数,n代表借鞋的人数public int getArrange1(int m, int n) {int[][] result = new int[m + 1][n + 1];   //初始化元素全为0for(int i = 1;i <= m;i++) {result[i][0] = 1;     //当借鞋的人数为0时,排列只有一种情况for(int j = 1;j <= n;j++) {if(i >= j)   //当i小于j时,排列总数为0result[i][j] = result[i - 1][j] + result[i][j - 1];}}return result[m][n];}public static void main(String[] args){Main test = new Main(); Scanner in = new Scanner(System.in);//    System.out.println("请分别输入还鞋人数m和和借鞋人数n:");int m = in.nextInt();int n = in.nextInt();System.out.println(test.getArrange1(m, n));}
}

运行结果:

请分别输入还鞋人数m和和借鞋人数n:
12 7
23256请分别输入还鞋人数m和和借鞋人数n:
4 3
14

参考资料:

1. 蓝桥杯 算法训练 未名湖边的烦恼

2.算法训练 未名湖边的烦恼【dp+递推】

3.蓝桥--未名湖边的烦恼 (递推)

算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)相关推荐

  1. 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负 ...

  2. 算法提高 求最大值java_算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)

    1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负. 输入格式 输入的第一行为n,数对的 ...

  3. 蓝桥杯之未名湖边的烦恼-递归极简版(c++实现)

    上文链接:蓝桥杯之Remember the A La Mode-需要谨慎处理逻辑关系(c++实现) 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好 ...

  4. 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n ...

  5. 算法笔记_120:蓝桥杯第六届省赛(Java语言B组部分习题)试题解答

     目录 1 三角形面积 2 立方变自身 3 三羊献瑞 4 九数组分数 5 饮料换购 6 生命之树   前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 三角形面积 三角形 ...

  6. 算法笔记_080:蓝桥杯练习 队列操作(Java)

    目录 1 问题描述 2 解决方案 1 问题描述 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 第一行一个数字N. 下面N行, ...

  7. 算法笔记_100:蓝桥杯练习 算法提高 三个整数的排序(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 输入三个数,比较其大小,并从大到小输出. 输入格式 一行三个整数. 输出格式 一行三个整数,从大到小排序. 样例输入 33 88 77 样 ...

  8. 算法笔记_094:蓝桥杯练习 矩阵相乘(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也没问题,但线性 ...

  9. Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)

    Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...

最新文章

  1. 掌握JAVA多线程的利器-线程池
  2. qt windows通过usb获取手机电量_华为手机系统故障修复及系统升级
  3. VS2013安装oepncv2.4.10 以及opencv 3.0.0
  4. 各种震撼的慢镜头,奇怪的知识又增加了!​
  5. CPP_封装_继承_多态
  6. 【转】WCF、WebAPI、WCFREST、WebService之间的区别
  7. Chrome 爬虫插件 Web Scraper
  8. Java自动生成增量补丁自动部署_java-Hibernate正在为表生成自动增量交替ID
  9. Centos7 防火墙开启端口
  10. 如何保证企业IT基础设施的高可用性
  11. SMbus和I2C异同, PMBUS
  12. C语言实数除法怎样保留小数(编程技巧)
  13. 如何进行IP子网划分
  14. 【千锋】网络安全笔记(总篇)--- 持续更新
  15. ajax前后端分离ckeditor,CKEditor富文本编辑器
  16. 谷歌2018年IO大会
  17. CPP2022-16-宏、函数重载与函数模板
  18. 交通大数据应用场景——高速落地检
  19. 数据结构——栈的使用
  20. Excel公式-TEXT函数使用

热门文章

  1. Hadoop集群启动、初体验
  2. MFC中的CString类使用方法指南
  3. 「镁客·请讲」Visense Studio冯樑杰:游戏基因的VR视频,最好的表现是真人实拍交互...
  4. python基础之函数当中的装饰器
  5. 2017-06-02 前端日报
  6. ajax 使用方法简述
  7. Swift面向对象基础(中)——Swift中的存储属性和计算属性
  8. 开发经常犯的错误之→【join表连接关联查询 】
  9. codepage IMLangCodePages
  10. 图灵成立七周年——经典回顾