演算法分析 N個蘋果放在N個盤子裡的問題

2021-09-22 09:35:05 字數 1521 閱讀 5435

題的描述:現在有n個一模一樣的蘋果,要放在編號為1、2、3……、n的盤子裡(假設盤子足夠大,能放下所有的蘋果),問一共有多少種放法?

演算法分析:

用符號f(i,j)表示i個蘋果放在j個盤子裡的放法數

如果1號盤子裡沒有蘋果,則i個蘋果要放在剩餘的j-1個盤子裡

如果1號盤裡有1個蘋果,則剩餘的i-1個蘋果放在剩餘的j-1個盤子裡

如果1號盤裡有2個蘋果,則剩餘的i-2個蘋果放在剩餘的j-1個盤子裡

以此類推

如果1號盤裡有i-1個蘋果,則剩下的1個蘋果放在j-1個盤子裡

如果1號盤裡有i個蘋果,則剩下的j-1個盤子裡沒有蘋果

於是得到以下的關係式

f(i,j)=f(i,j-1)+f(i-1,j-1)+f(i-2,j-1)+……+f(1,j-1)+f(0,j-1)

由上面的式子可以得出

f(i-1,j)=f(i-1,j-1)+f(i-2,j-1)+……+f(1,j-1)+f(0,j-1)

回代到①可知

f(i,j)=f(i,j-1)+f(i-1,j)

另由定義可知,

f(i,1)=1

f(1,i)=i

根據式子③④⑤,推測f(i,j)的計算公式為

f(i,j)=c(i,i+j-1)注:c(m,n)表示組合數,表示n個裡面選m的個數。組合數的計算公式這裡不描述了

下面用數學歸納法證明式子⑥的正確性

證明:f(i,1)=c(i,i+1-1)=c(i,i)=1式子④滿足式子⑥

f(1,i)=c(1,1+i-1)=c(1,i)=i式子⑤滿足式子⑥

假設f(i,j-1)、f(i-1,j)滿足式子⑥

f(i,j-1)=c(i,i+j-1-1)=c(i,i+j-2)

f(i-1,j)=c(i-1,i-1+j-1)=c(i-1,i+j-2)

則由式子③可知

f(i,j)=f(i,j-1)+f(i-1,j)=c(i,i+j-2)+c(i-1,i+j-2)=c(i,i+j-1)滿足式子⑥

由此證明式子⑥的正確性

故計算公式為

f(i,j)=c(i,i+j-1)

那麼3個蘋果放在3個盤子裡的放法數為f(3,3)=c(3,3+3-1)=c(3,5)=10

2個蘋果放在4個盤子裡的放法數為f(2,4)=c(2,2+4-1)=c(2,5)=10

7個蘋果放在7個盤子裡的放法數為f(7,7)=c(7,7+7-1)=c(7,13)=1716

10個蘋果放在10個盤子裡的放法數為f(10,10)=c(10,10+10-1)=c(10,19)=92378

n個蘋果放在n個盤子裡的放法數為f(n,n)=c(n,2n-1)

m個蘋果放在n個盤子中有多少種結果

m個蘋果放在n個盤子中有多少種結果,前置條件 根據題意,也就是有3種情況,的確完全重複的擺放方式是沒多大意義的 這題可以用列舉的描述方式進行尾遞迴求解 情況二 情況三 情況四 btw,存在乙個以上的空盤擺放方式與圖上的重複擺放方式是等價的,尾遞迴甚至效率並不比迴圈低,說了這麼多,研究此類問的方法還是...

m個蘋果放入n個盤子

放蘋果問題 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?注 5,1,1和1,1,5是同一種分法 解題分析 設f m,n 為m個蘋果,n個盤子的放法數目,則先對n作討論,當n m 必定有n m個盤子永遠空著,去掉它們對擺放蘋果方法數目不產生影響。即if n m ...

遞迴演算法《M個蘋果放入N個盤子》

題目 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。輸入每個用例包含二個整數m和n。0 m 10,1 n 10。樣例輸入 7 3樣例輸出 放蘋果分為兩種情況,一種是有盤子為空,一種是每個盤子上都有蘋果。令 m,n ...