题目:
有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 }
时间: 2024-12-27 09:54:18