题目:
思路:设i为苹果数 k为盘子数
当i<k: 把i个苹果放到k-1个盘子里(因为k>i)所以至少有一个空盘子 所以此时f(i,k)=f(i,k-1)
当k<i时:是苹果多 f(i-k,k)是把多出来的苹果进行分放
#include <iostream>
using namespace std;
int N;
int f(int i, int k)//求放苹果分法 i为苹果 k为盘子
{
if (i < k) return f(i,i);
if (i == 0) return 1;
if (k == 0) return 0;
return f(i, k - 1) + f(i - k, k);
}
int main()
{
int t,i,k;
cin >> t;
while (t--)
{
cin >> i >> k;//不断录入当前苹果和盘子数量
cout << f(i, k) << endl;
}
return 0;
}
样例: