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

來源:互聯網
上載者:User

標籤:動態規劃dp   計數問題   


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]


例二:有n種物品,第i種有a[i]個,從中選取m個,有多少種不同的選擇方法?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]];

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.