码迷,mamicode.com
首页 > 其他好文 > 详细

【搜索】售货员的烦恼(trouble)

时间:2018-07-22 21:14:13      阅读:466      评论:0      收藏:0      [点我收藏+]

标签:++   今天   else   不能   描述   main   amp   ace   cout   

题目描述

一间冰淇淋商店刚刚开张,外面有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很近了

【搜索】售货员的烦恼(trouble)

标签:++   今天   else   不能   描述   main   amp   ace   cout   

原文地址:https://www.cnblogs.com/hao-tian/p/9351399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!