放蘋果(求組合數)

2021-10-21 00:21:40 字數 689 閱讀 1179

問題:把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?

注意:假如有3個盤子,那麼 5,1,1 和 1,5,1 與 1,1,5 都是同一種分法。

這種求放物品的組合數問題,可以通過這樣的完備思路來構造遞迴公式:假設有n個盤子 ,那麼1、至少有乙個盤子不放蘋果 2、n個盤子都放蘋果,這兩種放法是完備的。所以求出兩種放法的方案數,加起來就能得出結果

接下來詳細利用這個思路:

假設 dp(m,n)記錄m個蘋果放在n個的盤子的總方案數

蘋果數m《盤子數n,那麼最多可以用上m的盤子,無論怎放,都會有n-m個盤子空出來,所以 dp(m,n) = dp(m,m);

蘋果數m>=盤子數n,

1、至少有乙個盤子不放蘋果,方案數量為dp(m,n-1) ;

2、n個盤子都放蘋果,這個時候,我們從每個盤子都拿出乙個蘋果,也不影響不同放法的方案數,方案數量為 dp(m-n,n)

所以狀態轉移公式:dp(m,n) = dp(m,n-1) + dp(m-n,n)

邊界:只有乙個盤子時(n=1),總放法只有一種 dp(m,1) = 1; 沒有蘋果的時候,定義為1種放法,所以n=1或者m=0時,dp=1

放蘋果 組合 DFS

把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。第一行是測試資料的數目t 0 t 20 以下每行均包含二個整數m和n,以空格分開。1 m,n 10。對輸入的每組資料m和n,用一行輸出相應的k。sample input...

組合數學 求組合數

對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...

POJ 1664 放蘋果 動態規劃思想解組合數學

該題說明了狀態開設的意義一樣,但是從哪個方向去理解推倒狀態的轉移對解題非常關鍵.該題扣住是否所有的盤子中有空盤子,就得到了乙個非常簡單且優美的方程.如果從當前盤子的放置狀態或者是當前蘋果的放置狀態來求解狀態轉移方程就不能寫出來.這和題意中的相同盤子,相同蘋果有很大的關係.如下 include inc...