http://poj.org/problem?id=1664
这道题可以采取递归的思想,分为两种状况,n为苹果数,m为盘子数
第一:当n<m时,那么就是将n个苹果分到n个盘的方法
第二:当n>=m时,那么1.将至少其中一个盘不放,那么就是n个苹果放到m-1个盘的方法
2.每个盘放一个,然后就是n-m个放在m个盘的放法
参考:https://blog.csdn.net/libin56842/article/details/17046433
#include<iostream>
using namespace std;
int dfs(int m, int n)
{
if (m == 1 || n == 1 || m == 0 || n == 0)
return 1;
if (m < n)
return dfs(m, m);
else
return dfs(m - n, n) + dfs(m, n - 1);
}
int main()
{
int t,m,n;
scanf_s("%d", &t);
while (t--)
{
scanf_s("%d %d", &m, &n);//m个苹果,n个盘子
cout << dfs(m, n) << endl;
}
return 0;
}