题目描述:
话说大诗人李白,一生好饮。幸好他从不开车。
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店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 =