基本動態規劃題學習筆記與解析 8(劃分數問題)

2021-09-26 04:38:53 字數 1170 閱讀 1963

這裡我們仍然用dp來求解

有n個無區別的物品,將其劃分成不超過m組,求出劃分方法數取模m的餘數

樣例輸入

n=4m=3

m=10000

輸出

4 (1+1+2 = 1+3 = 2+2 = 4)

這樣的劃分被稱作n的m劃分數。 dp問題對於計算各種排列組合個數,概率或者期望之類的計算都非常有用,在此,我們定義如下陣列

dp【i】【j】=j 的 i 劃分的總數

根據這一關係,我們可以尋找到對應的遞推式。 考慮n的m劃分中 各項為 ai (1<=i<=m),如果對於每個i都有ai >0 ,那麼所有ai 減1就對應了n-m 的m 劃分.

另外 ,如果存在ai =0 ,那麼其就對應相等於n的m-1 劃分。綜上,我們可以得到

dp【i】【j】=dp【i】【j-i 】+ dp【i-1】【j】;

可能上面描述有點簡略難以理解,分享一下個人理解

所有的ai都是一樣的,即可從某乙個ai開始考慮,若ai不為零即

所有的ai都至少為2,將其減一後所有ai都至少唯一,這種情況下的化分數

相當於j-i的i劃分,即為 dp【i】【j-i】

而當ai中存在1時,即建議後存在ai為零,這種情況下的劃分可以視為某乙個

ai不存在,即少了一段劃分,即為dp【i-1】【j】,這兩種情況包含所有情況,

將其加起來就是我們想要的解

**如下

#include

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

int dp[

100]

[100];

intmain()

else

//減少乙個i看是否能劃分

}printf

("%d"

,dp[m]

[n])

;}

有問題歡迎和我一起交流!qwq

基本動態規劃題學習筆記與解析 1

最最最基本的動態規劃題,最近室友問的挺多就寫一下 例 有n個重量和價值分別為 wi 和 vi 的物品,從這些物品中挑選出重量不超過w的物品,求所有挑選方案中價值總和的最大值 樣例輸入 n 4 w,v w 5 輸出 7 選第0,1,3號物品 記憶化搜尋 include include include ...

學習筆記 動態規劃

動態規劃 多階段決策 意義 求解決策過程最優化的數學方法 基本思想 將待求解的問題分為若干個階段,即若干個互相聯絡的子問題,在求解子問題的過程中逐步推導出原問題的解。核心 在求解子問題的過程中,儲存子問題的解。注1 動態規劃的思想實際上和遞迴相似。都是通過逐步推導,得到答案。而用它們解題時的核心也都...

學習筆記 動態規劃

bullet 先來看乙個問題 小張現在有8個任務可選,每個任務都必須在規定的時間段完成不能多也不能少,而且每個任務都有對應的報酬如下圖,問小張應如何選擇才能拿到最多的報酬?那我們換種方法來解決這個問題吧,首先,每個任務都有選和不選兩種選擇,我們從最後乙個任務開始模擬這個過程。首先我們需要先用乙個陣列...