(蓝桥杯第五届B组)李白打酒 DFS
2017-04-03 20:53
288 查看
李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。
思路:标准DFS,注意判断条件
代码:
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。
思路:标准DFS,注意判断条件
代码:
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<cmath> #include<algorithm> #include<string> #include<string.h> #include<set> #include<queue> #include<stack> #include<functional> const int maxn = 10000 + 10; using namespace std; char s[20]; int p; void dfs(int sum, int a, int b, int ans) { if (a == 5 && b == 10 && sum == 0 && s[14] == 'b') { p++; // cout << p << endl; return; } if (sum < 0 || a > 5 || b > 10)return; //cout << sum <<" "<< a <<" "<< b <<" "<< ans << endl; for (int i = 0; i < 2; i++) {//下一个位置 if (i == 0) { s[ans] = 'a'; dfs(sum*2, a+1, b, ans + 1); } else { s[ans] = 'b'; dfs(sum-1, a, b+1, ans + 1); } } } int main() { p = 0; dfs(2, 0, 0, 0); cout << p << endl; //system("pause"); return 0; }
相关文章推荐
- 李白打酒(第五届蓝桥杯)
- 2014年第五届蓝桥杯预赛题目之李白打酒
- 第五届蓝桥杯C++B组 李白打酒
- 【DFS填数】(2014)第五届蓝桥杯省赛 C/C++ B组 题解(第七题)
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒【暴力】or【DFS】
- 第五届蓝桥杯A组java—李白打酒
- 第五届蓝桥杯初赛-李白打酒
- 2014蓝桥杯 李白打酒(回溯dfs)
- 山东省第五届蓝桥杯 ///标题:李白打酒//c/c++组
- 2014年蓝桥杯省赛-李白打酒(结果填空) -DFS的应用
- 第五届蓝桥杯软件类省赛真题-Java高职-李白打酒
- 2014第五届蓝桥杯预赛试题本科c++李白打酒
- 蓝桥杯第五届B组 李白打酒
- 2014年第五届蓝桥杯试题C/C++程序设计B组——李白打酒
- 第四届蓝桥杯C++B组——李白打酒(dfs)
- 2014年第五届蓝桥杯预赛部分题目—李白打酒
- 第五届蓝桥杯软件类省赛真题-JAVA-A-2_李白打酒
- 第五届蓝桥杯—李白打酒
- 李白打酒-----第五届蓝桥杯
- 蓝桥杯_第五届_李白打酒