動態規劃第4講 計數問題中的DP演算法

2021-06-22 20:41:53 字數 693 閱讀 2610

dp不僅廣泛用於各種最優化問題,也常常用於排列組合的個數、概率期望計算等等,因為這些問題往往具有很好的「 重疊子問題」特性,這些問題往往都起源於排列組合中的組合公式a(n, k) = a(n-1, k) + a(n-1, k-1)

有n個無差別的物品,將他們劃分成不超過m組,求劃分方法數除以m的餘數。

分析:dp[i][j]j的i劃分的總數

dp[i][j] = dp[i][j-i] + dp[i-1][j] 物理意義:將j個物品分成i份,有兩種情況:每份劃分都大於等於1 dp[i][j-i]; 存在有乙份以上用0劃分dp[i-1][j]

dp[i+1][j]:從[0, i]號物品中選取j個物品的方法。

dp[i+1][j] = dp[i][j] + dp[i+1][j-1]

這是我們很直觀想到的乙個遞推關係:dp[i][j]:從i號物品中選0個, dp[i+1][j-1]從i號物品中至少選擇1個

實際上,由於是多重集而不是完全集合,因為我們已經選取了乙個i號物品,所以dp[i+1][j-1]表示的不是從i號物品中選擇至少乙個的數目,因為dp[i+1][j-1]包含了選取a[i]個i號物品,而實際上,這種情況是因該去掉的(因為i號物品的數量已經是a[i]-1了)。so, 結果的基礎上,需要減去dp[i][j-a[i]-1],也就是

dp[i+1][j] = dp[i][j] + dp[i+1][j-1] - dp[i][j-1-a[i]];

動態規劃,dp優化處理 人數計數問題

題面 東東每個學期都會去寢室接受掃樓的任務,並清點每個寢室的人數。每個寢室裡面有ai個人 1 i n 從第i到第j個宿舍一共有sum i,j a i a j 個人。東東需要掃樓m次,每一次數第i到第j個宿舍sum i,j 問題是要找到sum i1,j1 sum im,jm 的最大值。且ix iy j...

組合計數問題中容斥原理的應用

容斥原理作為數學中的乙個重要定理,在acm當中也有重要的應用,可以用於解決組合計數問題,概率論問題,數論問題。具體參見2013 成都七中 王迪 容斥原理 容斥原理當中奇數個集合為正,偶數個集合為負。其核心思想是 把重複的扣掉,再把扣多的加回來。初始化時會用到的公式 c m,0 c m,m 1 c n...

動態規劃 第3講 子串行問題

最近在複習期末考試,又有點懶,更新部落格的效率也下降了。話不多說,我們來刷一遍子串行問題,用動態規劃的方法。一 300.最長上公升子串行 難易程度 medium 原題鏈結 給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長...