未名湖边的烦恼 深搜

来源:互联网 发布:淘宝苏宁易购投诉 编辑:程序博客网 时间:2024/06/05 16:07

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

#include"stdio.h"int ans;void dfs(int m, int n,int x)//m为将要换鞋的,n为将要借鞋的,x为现有的鞋,有题意知最开始x = 0 {    if(x+m<n)//注意剪枝否则超时 现有的鞋加要换的鞋还比借鞋的人少,则没有解法    {        return;    }    if(n == 0)//注意剪枝否则超时 没有要借鞋的则此时得到一个解法    {        ans++;        return ;    }       if(x>0)//此时还有x,则可以继续借鞋    {        dfs(m,n-1,x-1);    }    if(m>0)//此时还有换鞋的人,则继续换鞋,x+1    {        dfs(m-1,n,x+1);    }}int main(){    int n,m;    scanf("%d%d",&m,&n);    if(m == 0 && n == 0)        ans = 0;     dfs(m,n,0);    printf("%d",ans);    return 0;} 
原创粉丝点击