蓝桥杯2016省赛B组----李白打酒
2018-03-31 22:09
375 查看
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把>酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)
这个题直接递归就好了, 主要注意一下结束条件 是最后一次遇到的是花
话不多说上代码
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把>酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)
这个题直接递归就好了, 主要注意一下结束条件 是最后一次遇到的是花
话不多说上代码
#include<bits/stdc++.h> #include<iostream> using namespace std; int count1 = 0; // a: 店 b :花 w: 酒 void f(int a, int b, int w){ if(a == 5 && b == 9 && w == 1){// 当花还 有一个的时候 酒为 1 这是结束条件 count1++; return; } if(b > 10) return; if(a > 5) return; if(w <= 0) return; f(a + 1, b, w * 2); f(a, b + 1, w - 1); }// 当然 这题 还可以向后推 几个 这样能减少递归的层次 增加速度 //比如 最后遇到的是 花 酒还剩一, 那么前面的肯定也是 一个花 酒还剩两 int main() { f(0, 0, 2); cout << count1 << endl; }
相关文章推荐
- 2016第七届蓝桥杯C/C++ B组省赛第一题:煤球数目
- 2016 第七届蓝桥杯 c/c++ B组省赛感受
- 2016第七届蓝桥杯C/C++ B组省赛第二题:生日蜡烛
- 2016第七届蓝桥杯C/C++ B组省赛第五题:抽签
- 2016第七届蓝桥杯C/C++ B组省赛第三题:凑算式
- 蓝桥杯2016省赛:生日蜡烛
- 2016 蓝桥杯 C/C++ B组 省赛 练习题(上半部分)
- 2016第七届蓝桥杯 C/C++省赛第9题 交换瓶子
- 2016蓝桥杯C/C++省赛 剪邮票(深搜DFS+暴力)
- 蓝桥杯2016省赛-四平方和
- 2016 第七届 蓝桥杯省赛B组第一题--堆煤球
- 2016 第七届蓝桥杯省赛B组第二题--生日蜡烛
- 蓝桥杯 2016 省赛B组 四平方和 (暴力)
- 2016 届蓝桥杯省赛B组第一题
- 2016第七届蓝桥杯省赛C组试题及部分答案
- 2016第七届蓝桥杯C/C++ B组省赛第四题
- 蓝桥杯省赛总结
- 2014年蓝桥杯省赛总结
- 2016蓝桥杯假期任务之《扶老奶奶过街》
- 2014蓝桥杯 李白打酒(回溯dfs)