數位DP
什麼是數位DP
數位DP是DP的一種,顧名思義,按每一個數位來進行DP。
什麼時候使用
題目的要求與一個數字相關,並且它能通過每一個數位來進行轉移。
例題:求所有 位數中能被 整除的數的個數。
怎麼使用
一般的DP是多維的,首先會有一維表示的是當前到了第幾位,通常情況這一維可以使用滾動。
其它的就是根據題目的實際要求了,如例題就需要一維來記錄除以 的餘數。
以例題爲例,我們來講講數位DP怎麼實現。
狀態與轉移
我們設 表示當前到了第 位,除以 的餘數爲 的方案數。
一般是從高位往低位DP,因爲最高位不能爲 ,所以我們對 的情況先處理好:
接着我們用第 位的狀態去更新第 位的狀態,每次枚舉當前在第 位加入 。
想想怎麼轉移?
對於當前的餘數 ,在末尾加入了 ,餘數變成什麼?
根據同餘的性質,我們自然可以得到:餘數變成了 。
所以,狀態轉移方程如下:
最後的答案是什麼?
首先,第一維自然是 ,那麼第二維取什麼值呢?
顯而易見,要求是 的倍數,所以第二維是 。
綜上所述,最後的答案是 。