李白打酒(DFS小例子)

题目描述:

话说大诗人李白,一生好饮。幸好他从不开车。

无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。

首先说一下自己其中一个错误的思路,收到前面做的象棋的影响,把整个局面想象成了一个map,2×15,其中第一列为a第二列为b,利用DFS搜索之后发现有很多重复的字符串,还得判重,非常的麻烦,最终放弃,贴上第一次DFS的错误代码。(2017/3/12)

第二次将打酒的过程想想成一棵二叉树,向左边分叉,向右边分叉,DFS遍历出所有5个a,10个b的结果,然后用solve() 处理遍历出来的字符串,不得不说,个人感觉最大的坑是处理字符串,原来以为打酒的过程喝没了即wine中途为0,这种搜索出来的结果是不正确的,接受的条件只能是最后一次打酒后wine为0。网上有大牛更简洁的代码,个人喜欢用处理字符串的方式,就用了solve() ,当然也可以不用,个人喜好。(附上本人渣代码2017/3/13)

//错误的示例,后续提醒自己不要犯错2017/3/12
 #include <iostream>
#include <cmath>

using namespace std;

char mapAlpha[15][2] = { '\0' };
char alpha[15] = { '\0' };
bool idx[15][2] = { false };
int count = 0;

int solve()
{
    int res = 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值