您的位置:首页 > 其它

蓝桥杯<<未名湖边的烦恼>>

2017-02-26 11:03 162 查看
[align=center]      算法训练 未名湖边的烦恼  [/align][align=center]时间限制:1.0s   内存限制:256.0MB[/align]  锦囊1锦囊2锦囊3问题描述  每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。  每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)输入格式  两个整数,表示m和n输出格式  一个整数,表示队伍的排法的方案数。样例输入3 2样例输出5数据规模和约定  m,n∈[0,18]  问题分析
第一次见到这题的时候第一感觉是用递归可以写,但却进入了一个误区,导致一直未能解出答案;首先来分析下有两种情况:1、n>m 很明显方案数为0;2、m>n;我们来讨论m>n,首先队列中还鞋的人数一定等于或大于借鞋人数,若等于的那么下一个人必须为还鞋的,若等于那么下一个就还鞋或借鞋都可;源代码如下:
#include<iostream>using namespace std;int n,m;int px(int huan,int jie){if(!huan)	return 1;//还未进入队列的还鞋的人数以为0;if(!jie)	return 1;//还未进入队列的借鞋的人已经为0if(m-huan>n-jie)	return px(huan-1,jie)+px(huan,jie-1);//队列中还鞋的人大于借鞋的if(m-huan==n-jie) return px(huan-1,jie);//队列中还鞋的人等于借鞋的}int main(){cin>>m>>n;if(n>m)	cout<<0;else	cout<<px(m,n);return 0;} 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: