【數位DP】入門學習詳解

數位DP

什麼是數位DP

數位DP是DP的一種,顧名思義,按每一個數位來進行DP。

什麼時候使用

題目的要求與一個數字相關,並且它能通過每一個數位來進行轉移。
例題:求所有n 位數中能被m 整除的數的個數。

怎麼使用

一般的DP是多維的,首先會有一維表示的是當前到了第幾位,通常情況這一維可以使用滾動。
其它的就是根據題目的實際要求了,如例題就需要一維來記錄除以m 的餘數。
以例題爲例,我們來講講數位DP怎麼實現。

狀態與轉移

我們設f[i][j] 表示當前到了第i 位,除以m 的餘數爲j 的方案數。
一般是從高位往低位DP,因爲最高位不能爲0 ,所以我們對i=1 的情況先處理好:

f[1][imodm]=1(1i9)

接着我們用第i 位的狀態去更新第i+1 位的狀態,每次枚舉當前在第i+1 位加入k
想想怎麼轉移?
對於當前的餘數j ,在末尾加入了k ,餘數變成什麼?
根據同餘的性質,我們自然可以得到:餘數變成了(j10+k)modm
所以,狀態轉移方程如下:

f[i+1][(j10+k)modm]+=f[i][j](1i<n0j<m0k9)

最後的答案是什麼?
首先,第一維自然是n ,那麼第二維取什麼值呢?
顯而易見,要求是m 的倍數,所以第二維是0
綜上所述,最後的答案是f[n][0]

更多拓展

【數位DP】JZOJ 5831. 【NOIP提高A組模擬2018.8.18】 number

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章