2 solutions
-
2
#include <bits/stdc++.h> using namespace std; int dfs(int m, int n) { if (m == 0 || n == 1) return 1;//没有桃桃或者只有一个盘子搜索结束 else if (m < n) return dfs(m, m);//每个桃桃占一个盘子则最多只能占有n个盘子 //若放满盘子,则可以将所有盘子的桃桃各拿掉一个方案数不变,有f1(m,n)=f(m-n,n) //若不放满盘子,则可以把空盘子直接拿掉一个再做考虑有f2(m,n)=f(m,n-1) //所以f(m,n)=f1(m-n,n)+f2(m,n-1) else return dfs(m - n, n) + dfs(m, n - 1); } int main() { int t, m, n; cin >> t; while (t--) { cin >> m >> n; cout << dfs(m, n) << endl;//开整 } return 0; }
- 1
Information
- ID
- 162
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 28
- Accepted
- 13
- Uploaded By