WooKinson

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

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

 

代码如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 
 5 void ds(int m,int n,int res,int* sum)
 6 {
 7     if (m==0&&n==0)
 8         (*sum) ++;
 9     
10     if (res > 0)//有鞋可出租 
11         if (n>0)
12             ds(m,n-1,res-1,sum);//租出一双鞋 
13             
14     if (m>0)
15         ds(m-1,n,res+1,sum);//还回一双鞋 
16     
17     return ;
18 }
19 
20 int main(void)
21 {    
22     int m,n,sum=0;    
23     scanf("%d%d",&m,&n);
24     if (m<n || m==0&&n==0)
25         printf("0");
26     else
27     {
28         ds(m,n,0,&sum);
29         printf("%d",sum);
30     }
31         
32     
33     return 0;
34 }
35     
C解法

 

解题思路:

还鞋库存+1,租鞋库存-1;

1.有鞋可还时进行还鞋操作,

2.当库存有鞋时,需要租鞋时进行租鞋操作

posted on 2018-12-26 16:47  WooKinson  阅读(136)  评论(0编辑  收藏  举报