根据题意,将n个苹果放入m个盘子中,盘子样式相同,求所有方法。
这是一个典型的整数划分问题
1.n == 1 只有一个苹果,由于盘子样式相同,那么放在哪个盘子中都是一种放法,fun(n,m) = 1
2.m == 1 只有一个盘子,将所有苹果放到那个盘子中 fun(n,m) = 1
3.n < m 盘子数比苹果数多,最多把n个苹果放到n个盘子中 fun(n,m) = fun(n,n)
4.n == m 盘子数等于苹果数,第一种情况每个盘子放一个苹果,第二种情况在至少一个盘子不放苹果的情况下,fun(n,m) = fun(n,m-1) 所以fun(n,m) = 1 + fun(n,m-1)
5.n <= m 第一种情况至少一个盘子不放苹果,fun(n,m) = fun(n,m-1) 第二种情况所有盘子都有苹果,将每个盘子苹果拿出一个,再将n-m个苹果放到m个盘子中 fun(n,m) = fun(n-m,m) 所以fun(n,m) = fun(n-m,m) + fun(n,m-1)
#include<iostream> using namespace std; int fun(int a,int b) { if(a==1||b==1) return 1; if(a < b) return fun(a,a); if(a == b) return 1 + fun(a,b-1); return fun(a,b-1) + fun(a-b,b); } int main() { int count,a,b; cin >> count; while(count--) { cin>>a>>b; cout<<fun(a,b)<<endl; } return 0; }