m個蘋果放入n個盤子問題,n個盤子不同的問題

2021-09-02 13:02:15 字數 1351 閱讀 2709

網上已經有許多關於,m個蘋果放入n個盤子的問題(盤子相同),但是沒有具體關於n個盤子不同的問題,在這裡根據前面的n個盤子相同的基礎上,進行分析得出相應的遞推公式。針對前一問題這裡不再詳細介紹,具體的網頁鏈結為:

問題描述:

問題描述:把m個同樣的蘋果放在n個不同的盤子裡,允許有的盤子空著不放,問有多少種不同的分法?(注:5,1,1和1,1,5是不同的分法)

解題分析:

設f(m,n)為m個蘋果,n個盤子的放法數目,則先對n作討論,

即含有0的方案數,即有至少乙個盤子空著,即相當於

不含有0的方案數,即每個盤子至少有乙個蘋果,只需要將剩下的n-m個蘋果放入盤子中即可,即相當於

遞迴出口條件說明:

用遞迴的解法:

from scipy.special import comb, perm

def fun(m, n): #m為蘋果總數,n為盤子總數

if m == 0 or n == 1:

return 1

if n > m:

return comb(n,m)*fun(m,m)

else:

return comb(n, 1)*fun(m, n-1) + fun(m-n, n)

用動態規劃的解法:

def getdp(m, n):

matrix = [[0 for j in range(n+1)] for i in range(m+1)]

for i in range(m+1):

matrix[i][0] = 0 #將i個蘋果總共加到0個位置,沒有盤子可以放蘋果

matrix[i][1] = 1 #將i個蘋果加到1個位置上,總共只有一種放蘋果的方法

for j in range(n+1):

matrix[0][j] = 1 #總共j個位置,不放蘋果只有一種方法

for i in range(1, m+1, 1):

for j in range(1, n+1, 1):

if i < j:

matrix[i][j] = int(comb(j, i)*matrix[i][i])

else:

matrix[i][j] = int(comb(j, 1)*matrix[i][j - 1] + matrix[i-j][j])

for i in matrix:

print(i)

return matrix[m][n]

m個蘋果放入n個盤子問題

題目 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。輸入每個用例包含二個整數m和n。0 m 10,1 n 10。0 n 10 m 10 解題思路 我們首先定義dp i j 表示i個蘋果,j個盤子的分法總數 1.當盤...

m個蘋果放入n個盤子問題

這個問題,看似是乙個簡單的排列組合問題,但是加上不同的限制條件,會演變成不同的問題,感覺很奇妙,就總結一下列舉下來 問題一 問題描述 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問有多少種不同的分法?注 5,1,1和1,1,5是同一種分法 解題分析 設f m,n 為m個蘋果,n個盤子...

m個蘋果放入n個盤子

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