zoukankan      html  css  js  c++  java
  • 【搜索】售货员的烦恼(trouble)

    题目描述

    一间冰淇淋商店刚刚开张,外面有2×N个人购买1元的冰淇淋,其中一半人拿着1张2元人民币,另一半人拿一张1元人民币。售货员很粗心,没有准备零钱,要使出售过程中不发生找钱困难的问题,这2×N个人应该如何排队?请你帮售货员找出所有方案数量的总和。

    输入

    一个整数N(N≤15)。

    输出

    方案总数M。

    样例输入

    4
    
    

    样例输出

    14

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int n;
    int ans = 0;
    int cnt1 = 0,cnt2 = 0;
    void dfs(int now)
    {
        if(cnt1>n||cnt2>n)
        {
            return;
        }
        if(now==2*n)
        {
            ans++;
            return;
        }
        else
        {
            if(cnt1<cnt2)
            {
                return;
            }
            else
            {
                cnt1++;
                dfs(now+1);
                cnt1--;
                cnt2++;
                dfs(now+1);
                cnt2--;
            }
        }
    }
    
    int main()
    {
        cin>>n;
        dfs(0);
        cout<<ans;
        return 0;
    }

    要找开钱 只需要1块的数量大于等于2的数量 cnt1为1块的数量 cnt2为2块的数量

    并且要注意边界cnt1 cnt2不能大于n

    写这个题解的原因是 也许是今天写了很多搜索     这道题迷迷糊糊的写过了的   应该是感觉对了吧  (虽然刷的都是入门的题目)

    dfs最重要的是判断每一次搜索改变的量是什么   边界条件是什么 就离AC很近了

  • 相关阅读:
    Spring
    JavaWeb
    JDBC
    MYSQL
    IDEA个人常用快捷键
    Web前端-JAVASCRIPT
    Web前端-HTML
    注解与反射
    多线程
    区块链 ATS多策略量化机器人简介
  • 原文地址:https://www.cnblogs.com/hao-tian/p/9351399.html
Copyright © 2011-2022 走看看