#include <iostream> #include<cstring> using namespace std; const int N = 30; int f[N][N];//f[i][j]i个苹果放入j个盘子 //分成没有空盘子和有空盘子 //有空盘子f[i][j]=f[i][j-1] //没有空盘子f[i][j]=f[i-j][j],每个盘子至少有一个苹果那方案数量和 //每个盘子都减去以一个苹果的方案数量相同 int main() { int n, m; while (cin >> m >> n) { memset(f, 0, sizeof f); for (int j = 0; j <= n; j++) f[0][j] = 1; /*for(int i=0;i<=m;i++) f[i][0]=1;*/ //f[0][0] = 1; for (int i = 1; i <= m; i++) for (int j = 0; j <= n; j++) { f[i][j]=f[i][j-1]; //这里i-j可能为负数要小心 if(i-j>=0) f[i][j] += f[i - j][j]; } cout << f[m][n] << endl; } } // 64 位输出请用 printf("%lld")