问题描述
每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。
每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)
输入格式
两个整数,表示m和n
输出格式
一个整数,表示队伍的排法的方案数。
样例输入
3 2
样例输出
5
数据规模和约定
m,n∈[0,18]
问题分析
m人还鞋,n人租鞋
若要保证有鞋可以租出去,需要m>n,并且第一个人得是还鞋的
当m<n时,将没有鞋可以租出去,这个时候的方案树为0
当m=n时,因为题中说了不考虑顺序的问题,所以只有一种情况,就是还多少鞋租多少鞋
最后一个人分为两种情况,还鞋或者租鞋,我们采用递归的方法,从后往前
m,n = map(int, input(). split())
def mn(m, n):
if m < n:
return 0
if n == 0:
return 1
return mn(m-1, n)+mn(m, n-1)
#fun(m-1,n)是确定最后一位为还鞋的方案数
#fun(m,n-1)是确定最后一位为租鞋的方案数
print(mn(m, n))