zoukankan      html  css  js  c++  java
  • 蓝桥杯练习系统 未名湖边的烦恼(测评数据2没过 88分)【DFS】

    问题描述
      每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。
      每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)
    输入格式
      两个整数,表示m和n
    输出格式
      一个整数,表示队伍的排法的方案数。
    样例输入
    3 2
    样例输出
    5
    数据规模和约定
      m,n∈[0,18]
    #include<iostream>
    using namespace std;
    int a[20];//a[i]=1表示还鞋, a[i]=-1表示借鞋 
    int m=0,n=0;//m表示当前已还鞋(1)人数  n表示已借鞋(-1)人数 
    int mm,nn;
    int sum=0;
    int getsum(int x){//前x个总和 
        int all=0;
        for(int i=0;i<x;i++){
            all+=a[i];
        }
        return all;
    }
    void dfs(int x){
        if(x==mm+nn){
            sum++;
            return; 
        } 
        if(getsum(x)<=0){//只能还鞋 
            if(m<mm){//有人还鞋 
                a[x]=1;
                m++; 
                dfs(x+1);    
            }
            else return;//没人还鞋    
        }
        else{
            if(m<mm&&n==nn){//只能还鞋 
                a[x]=1;
                m++;
                dfs(x+1);
                
            }
            if(m<mm&&n<nn){//借鞋还鞋都可以 
                a[x]=1;
                m++;
                int tm=m-1;
                int tn=n;
                dfs(x+1);
                
                m=tm;
                n=tn;
                a[x]=-1;
                n++;
                dfs(x+1);
            }
            if(m==mm&&n<nn){
                a[x]=-1;
                n++;
                dfs(x+1);
            }
            else return;
        }
    }
    int main(){
        cin>>mm>>nn;
        dfs(0);
        cout<<sum<<endl;
    }

    dfs来做的  不知道为什么第二组测评数据没过

  • 相关阅读:
    菜鸟学python之程序初体验
    菜鸟学python之大数据的初认识
    js获取本地ip地址和外网IP地址
    Js中foreach()用法及使用的坑
    模拟实现Promise,探究Promise原理
    搞懂JS的事件循环(Event Loop)和宏任务/微任务
    NodeJS 中的 LRU 缓存(CLOCK-2-hand)实现
    设计模式在前端项目中的应用
    JS 中一些高效的魔法运算符
    Js中如何克隆对象?
  • 原文地址:https://www.cnblogs.com/Elaine-DWL/p/6651789.html
Copyright © 2011-2022 走看看