搜索售货员的烦恼(trouble)

Posted hao-tian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索售货员的烦恼(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很近了



以上是关于搜索售货员的烦恼(trouble)的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1863 [Zjoi2006]trouble 皇帝的烦恼

P1171 售货员的难题--搜索(剪枝)

题解P1171 售货员的难题

如何从片段到活动而不会干扰片段的可重用性

实训-第四天 Never trouble trouble till trouble troubles you

小草的Trouble学生信息管理系统