ALGO-122 未名湖边的烦恼

ALGO-122 未名湖边的烦恼_第1张图片

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

递归

#include
using namespace std;
int fun(int m,int n,int d);
int main(void)
{
     
	int m,n,d=0;//d表示当前租鞋处现有鞋的数量,初始为0
	cin>>m>>n;
	cout<<fun(m,n,0);
	return 0;
}
int fun(int m,int n,int d)
{
     
	if(m==0 && n==0)return 0;//递归出口,队伍人数为0
	if(d<0 || m<0 || n<0)return 0;//递归出口,三个值不可能小于0
	if(d+m<n)return 0;//递归出口,三者关系从根本上没法满足需求
	if(m==0)//还鞋完成看存货
	{
     
		if(d>=n)return 1;
		else return 0;
	}
	if(n==0)return 1;//租鞋完成肯定行
	return(fun(m-1,n,d+1)+fun(m,n-1,d-1));
}

你可能感兴趣的:(#,蓝桥试题集)