M個蘋果放在N個盤子裡,有多少種不同的放法
阿新 • • 發佈:2018-12-17
1. 問題
M個同樣的蘋果放N個同樣的盤子,允許有盤子空著, 問有多少种放法?
2.分析
令f(m,n)表示m個蘋果放到n個盤子裡有多少种放法,下面分類討論:
- m<n時,至少有n-m個盤子空著(這些空盤子並不影響最後的結果,因為每種方法都帶有著些空盤子)。只考慮m個蘋果放m個盤子 f(m,n)=f(m,m)
- m>n時,按是否有空盤子 分2種情況:
a.假設至少一個盤子空著,相當於f(m,n)=f(m,n-1)
b.所有的盤子都有蘋果,假設每個盤子可以先放一個,問題就變成:m-n個蘋果放到n個盤子,即f(m,n)=f(m-n,n)
總的放法為二者之和, f(m,n)=f(m,n-1)+f(m-n,n)
3. 臨界條件
n=1時,所有蘋果都放在同一個盤子裡 f(m,n)=1
m=0時,沒有蘋果 f(m,n)=1
3.code
用遞迴實現分治
public int fun(int m,int n){
if(m<=1||n==1)
return 1;
else if ( n == 0)
return 0;
else if(n>m)
return fun(m,n-1);
return fun(m-n,n) + fun(m,n-1);
}