#include <iostream> #include <cstring> // 用于memset using namespace std; int dp[11][11]; // 全局记忆数组,m和n最大为10 int f(int m, int n) { if (m == 0) return 1; // 没有苹果,只有一种分法 if (n == 0) return 0; // 没有盘子,无法分 if (dp[m][n] != -1) return dp[m][n]; // 已计算过,直接返回 //3种边界情况处理 int res = f(m, n - 1); // 至少有一个空盘的情况 if (m >= n) { res += f(m - n, n); // 所有盘子至少有一个苹果的情况 } dp[m][n] = res; // 记录结果 return res; } int main() { int M, N; while (cin >> M >> N) { memset(dp, -1, sizeof(dp)); // 每次计算前重置记忆数组 cout << f(M, N) << endl; } return 0; }