首页 > 代码库 > 深搜吧!

深搜吧!

题目:

有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 }
View Code

 

深搜吧!