- 總Time Limit:
- 1000ms
- Memory Limit:
- 65536kB
- Description
- 把M個同樣的蘋果放在N個同樣的盤子裏,允許有的盤子空着不放,問共有多少種不同的分法?(用K表示)5,1,1和1,5,1 是同一種分法。
- Input
- 第一行是測試數據的數目t(0 <= t <= 20)。以下每行均包含二個整數M和N,以空格分開。1<=M,N<=10。
- Output
- 對輸入的每組數據M和N,用一行輸出相應的K。
- Sample Input
-
1 7 3
- Sample Output
-
8
-----------------------------------------------------
當盤子數大於蘋果數時,把m個蘋果放到n個盤子和把m個蘋果放到m個盤子相同
當盤子數小於蘋果數時,分爲兩種情況,至少空一個盤子和所有盤子都是滿的
把m個蘋果放到n個盤子中,至少空一個盤子的放法與把m個蘋果放到n-1個盤子的放法相等。
所有盤子都是滿的放法與把所有盤子裏面的蘋果拿走一個的放法相同
#include <iostream>
using namespace std;
int f(int m,int n)
{
if (m < n)
return f(m, m);
else if ( m == 0 || n == 1)
return 1;
else
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;
}
return 0;
}