2014年蓝桥杯C/C++大学B组省赛真题(李白打酒)
题目描述:
题目描述
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
代码:
#include<iostream>
using namespace std;
int res;
void dfs(int count,int n1,int n2){
//除去最后一次遇到花店,如果总共遇到了5次酒店,9次花店,而且最后还剩1斗酒,则答案加1,并返回
if(count==1&&n1==5&&n2==9){
res++;
return ;
}
//如果越界则返回
if(n1>5||n2>9)return ;
//遇到酒店
dfs(count*2,n1+1,n2);
//遇到花
dfs(count-1,n1,n2+1);
}
int main(){
dfs(2,0,0);
cout<<res<<endl;
return 0;
}