李白打酒(dfs递归)

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

一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:

无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。

答案为 :14

 1 public class 李白打酒 {
 2     static int res;
 3      public static void main(String[] args) {
 4         dfs(5,9,2); //花为9不为10 是因为这里不考虑最后一次为花的情况 不然还要讨论最后一次是什么
 5         System.out.println(res);
 6     }
 7      static void dfs(int dian,int hua,int jiu){ //三个参数对应  店,花和酒的数目
 8          if(jiu==1 && dian==0 && hua==0){ //这里酒为1不为0是因为不考虑最后一次遇到花
 9              res++;            
10          }
11          if(dian>0) dfs(dian-1,hua,jiu*2);
12          if(hua>0) dfs(dian,hua-1,jiu-1);
13      }
14 }

 

上一篇:【蓝桥杯】真题训练 2014年C++B组 题3 李白打酒


下一篇:c++ 蓝桥杯 李白喝酒