算法训练 未名湖边的烦恼
时间限制:1.0s 内存限制:256.0MB
问题描述
每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。
每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)
每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)
输入格式
两个整数,表示m和n
输出格式
一个整数,表示队伍的排法的方案数。
样例输入
3 2
样例输出
5
数据规模和约定
m,n∈[0,18]
示例代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
long m = Long.parseLong(str[0]);
long n = Long.parseLong(str[1]); long ans = program(m,n); System.out.println(ans); } /**
* 队伍排列
* @param m 还鞋人数
* @param n 租鞋人数
* @return 队伍排列方案数
*/
public static long program(long m, long n){
if(m<n) //如果还鞋的人数小于租鞋的人数,则就会出现无鞋可租的情况
return 0;
else if(n==0) //如果没有租鞋的人,则只有一种情况,即为还鞋的人
return 1;
else
return program(m-1, n) + program(m, n-1); //第一个人来还鞋 + 第一个人来租鞋
} }