首页 > 代码库 > 深搜吧!
深搜吧!
题目:
有n+m个地点,我们依次经过。 这些地点包括n个银行和m个超市,而且最后一个点是超市。初始有2块钱。遇到银行会再取一倍的钱,遇到超市会花一块钱。我们恰好在最后一个超市花完所有钱。 问你这n+m个点关于哪些点是银行,那些点是超市,可能是怎样的情况。把情况种数算出来。
输入范例
1 3
输出范例
1
1 /*直接深搜即可,可以适当剪枝。 不要忘记最后一个点是超市,且在最后一个点恰好花完最后一块钱。 2 于是,搜索条件可以是—— 3 1,num<=m 4 2,num==0作为结束的判定位置 5 3,枚举下个点是银行还是超市*/ 6 7 #include<iostream> 8 using namespace std; 9 10 int dfs(int rest, int n, int m) 11 { 12 if(n == 0 && m == 1) 13 { 14 return rest == 1; 15 } 16 if(rest <= 0) return 0; 17 int res = 0; 18 if(m > 1 && rest > 1) res += dfs(rest - 1, n, m - 1); 19 if(n > 0 && rest * 2 <= m) res += dfs(rest * 2, n - 1, m); 20 return res; 21 } 22 23 int main() 24 { 25 int n,m; 26 while(cin>>n>>m) 27 { 28 cout<<dfs(2, n, m)<<endl; 29 } 30 return 0; 31 }
深搜吧!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。