POJ水題 放蘋果

放蘋果
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 23151   Accepted: 14696

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
題目分析:
   用for循環控制輸入的次數。
   當M=0或者N=1時,只有一種放的方式。
   當N<M時,相當於把M個蘋果放進M個盤子裏。
   當N小於等於M時,可以分爲兩種情況:每個盤子裏至少有一個蘋果,或者至少有一個盤子裏沒有蘋果。
   對於每個盤子裏至少有一個蘋果的情況,可以從每個盤子裏拿出一個蘋果,即相當於把M-N個蘋果放進N個盤子裏。
   對於第二種情況,可以將不放蘋果的盤子除去,即相當於把M個蘋果放進N-1個盤子裏。
   綜上分析可以得到遞歸公式:F(M,N)=F(M-N,N)+F(M,N-1)。

C源代碼:
#include<stdio.h>
int f(int m,int n);

int main(){
	int t,m,n;
	scanf("%d",&t);
	for(;t>0;t--){
		scanf("%d%d",&m,&n);
		printf("%d\n",f(m,n));
	}
	return 0;

}

int f(int m,int n){
	int k;
	if(m==0||n==1)
		k=1;
	else
		if(n>m)
			k=f(m,m);
		else
			k=f(m,n-1)+f(m-n,n);
		return k;
}


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