poj 1664 放蘋果

總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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章