遞迴分蘋果組合數論

2021-07-29 00:15:26 字數 1204 閱讀 4212

【問題】將m個相同的蘋果放入n個相同的盤子

一共有多少種放法?注和是相同的一種。

分析:

所有不同的擺放方法可以分為兩類:至少有乙個盤子為空和所有盤子都不空。對於至少空著乙個盤子的情況,則n 個盤子擺放m 個蘋果的擺放方法數目與況,則n 個盤子擺放m 個蘋果的擺放方法數目等於n 個盤子擺放m-n 個蘋果的擺放方法數目。我們可以據此來用遞迴的方法求解這個問題。

設f(m, n) 為m個蘋果,n 個盤子的放法數目,

則先對n 作討論,

如果n>m,必定有n-m 個盤子永遠空著,去掉它們對擺放蘋果方法數目不產生影響;即if(n>m) f(m,n) =f(m,m)。

如果n <= m 時,不同的放法可以分成兩類:即有至少乙個盤子空著或者所有盤子都有蘋果,前一種情況相當於f(

m,n)

=f(m

,n−1

) f(m

,n)=

f(m,

n−1)

後一種情況可以從每個盤子中拿掉乙個蘋果,不影響不同放法的數目,即 f(

m,n)

=f(m

−n,n

) f(m

,n)=

f(m−

n,n)

總的放蘋果的放法數目等於兩者的和,即 f(

m,n)

=f(m

,n−1

)+f(

m−n,

n)f (m

,n)=

f(m,

n−1)

+f(m

−n,n

)整個遞迴過程描述如下:

int f(int m , int n)

由上可知:當n=1時,所有蘋果都必須放在乙個盤子裡,所以返回1;當沒有蘋果可放時,定義為1種放法;遞迴的兩條路,第一條n會逐漸減少,終會到達出口n==1; 第二條m 會逐漸減少,因為n>m 時,我們會return f(m , m) 所以終會到達出口m==0.

【完整**】

#include

using

namespace

std;

//將m個相同的蘋果放入n個相同的盤子

//一共有多少種放法。

int f(int m,int n)

int main()

}

方程(1)(數論 組合數)

description 求關於x1,x2,xn 的方程 x1 x2 xn k 的非負整數解的個數。input 僅一行,包含 個正整數n,k。output 乙個整數,表示方程不同解的個數,這個數可能很大,你只需輸出mod 20080814的結果。分析 這其實是乙個組合數的模型 有n種元素,每種元素可不...

組合數取模 數論

本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 time limit 1 sec memory limit 128 mb submit 113 solved 39 submit status web board 給出n,m,p,求c n,m mod p 1 m n 10 6,1 p 1...

遞迴 組合數相關

題目的幾何意 義 題目 的幾何意 義 給出矩陣最上面一行和最左邊一行,i,j i j 點的值為 f i j f i,j f i j f i 1,j f i j 1 f i j f i 1,j f i j 1 要求計算矩陣內的元素 假設現在要求點 a a x,y x y 的答案,上邊界上的點 b b ...