蓝桥杯-未名湖边的烦恼(java)
2017-04-02 15:44
519 查看
算法训练 未名湖边的烦恼 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法) 输入格式 两个整数,表示m和n 输出格式 一个整数,表示队伍的排法的方案数。 样例输入 3 2 样例输出 5 数据规模和约定 m,n∈[0,18] 问题分析
解题思路:这是一种类似汉诺塔问题的题目,首先要保证换鞋的人m 多于借鞋的人n。否则,无论怎么排序,都是会出现无鞋可借的尴尬局面。
所以,首先判断(m>n),否则返回0,表示没有方法来排序。
package com.sihai.advance; import java.util.Scanner; public class Mominghudeyoushang { public static int fun(int m,int n) { if(m<n) { return 0; } else if (n==0) { return 1; } else return fun(m-1,n)+fun(m,n-1); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int m = scanner.nextInt(); int n = scanner.nextInt(); System.out.println(fun(m,n)); } }
注意:这里的return fun(m-1,n)+fun(m,n-1) 前面的fun(m-1,n)意思是还鞋子的一个人站在最前面,之后剩下的哪些人再接着排序,fun(m,n-1) 意思是借鞋子的人站在最后面,剩下的再接着排序。
下面再看一个例子:
爬楼梯问题:一段楼梯共n级台阶,每次只能走一级或两级,问共有多少种走法?列出n=10时的所有走法。
乍看知道问题感觉还是稍显的有些麻烦,我们这样子来想,假如 n = 7 时,最后一步是会有f(7) = f(5) + f(6)
得在 n = 1和2的时候,我们得到f(1),f(2)为1
所以,我们到下面的公式
说白了,这个其实就是斐波那契数列
package com.sihai.advance; public class ClimbStairs { public int stairs(int n) { if (n == 1) return 1; if (n == 2) return 2; else { return stairs(n - 1) + stairs(n - 2); } } public static void main(String[] args) { int n = 7; ClimbStairs cs = new ClimbStairs(); int sum = cs.stairs(n); System.out.println(sum); } }
相关文章推荐
- 蓝桥杯-未名湖边的烦恼-递归-java
- 算法-蓝桥杯-算法训练 未名湖边的烦恼 (JAVA)
- 蓝桥杯 算法训练 未名湖边的烦恼 (Java解题)
- 算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
- 蓝桥杯 未名湖边的烦恼 动态规划
- 蓝桥杯 未名湖边的烦恼 (算法训练)
- 递归算法之排队购票问题(未名湖边的烦恼)java实现
- 蓝桥杯 ALGO-122 算法训练 未名湖边的烦恼
- 蓝桥杯 未名湖的烦恼(递归)
- 蓝桥杯 算法训练 未名湖边的烦恼
- 未名湖边的烦恼-蓝桥杯算法训练题-递推/递归
- 蓝桥杯 未名湖畔的烦恼(java题解)
- 蓝桥杯 算法训练 未名湖边的烦恼 (dfs)
- 蓝桥杯--算法训练 未名湖边的烦恼 (递归)
- 蓝桥杯 未名湖边的烦恼 (递归)
- 蓝桥杯--未名湖边的烦恼 --- 递归
- 蓝桥杯 未名湖边的烦恼
- 未名湖边的烦恼--蓝桥杯题目
- 蓝桥杯 未名湖边的烦恼 (简单暴力dfs)
- 蓝桥杯 算法训练 未名湖边的烦恼 (递推)