问题描述
分析:k为盘子数,i为苹果数
k > i 时,f ( i , k ) = f ( i , i )
k ≤ i 时,总放法 = 有盘子为空的放法 + 没有盘子为空的放法,即f ( i , k ) = f ( i , k - 1 ) + f ( i-k , k )
程序代码
#include <iostream>
using namespace std;
int f(int m, int n) {
if (n > m) return f(m, m);
if (m == 0) return 1; //没苹果,只有一种情况
if (n == 0) return 0; //没盘子,没法放
return f(m, n - 1) + f(m - n, n);
}
int main()
{
int t, m, n;
cin >> t;
while (t--) {
cin >> m >> n;
cout << f(m, n) << endl;
}
}