HDU 3555 Bomb (数位DP)
數(shù)位dp,主要用來解決統(tǒng)計滿足某類特殊關(guān)系或有某些特點的區(qū)間內(nèi)的數(shù)的個數(shù),它是按位來進行計數(shù)統(tǒng)計的,可以保存子狀態(tài),速度較快。數(shù)位dp做多了后,套路基本上都差不多,關(guān)鍵把要保存的狀態(tài)給抽象出來,保存下來。
簡介:
顧名思義,所謂的數(shù)位DP就是按照數(shù)字的個,十,百,千……位數(shù)進行的DP。
數(shù)位DP的題目有著非常明顯的性質(zhì):
????? 詢問[l,r]的區(qū)間內(nèi),有多少的數(shù)字滿足某個性質(zhì)
做法根據(jù)前綴和的思想,求出[0,l-1]和[0,r]中滿足性質(zhì)的數(shù)的個數(shù),然后相減即可。
算法核心:
關(guān)于數(shù)位DP,貌似寫法還是比較多的,有遞歸的,也有非遞歸的。
下面學習一下較好理解,可拓展性較高的遞歸寫法。
一般需要以上參數(shù)(當然具體情況具體分析)。
- x表示當前的數(shù)位(一般都是從高位到低位)
- pre表示前一位的數(shù)字
- bo可以表示一些附加條件:是否有前項0,是否包含49,是否當前已經(jīng)符合條件……
- limit這個很重要!它表示當前數(shù)位是否受到上一位的限制,比較抽象,舉例說明
如果上限是135,前兩位已經(jīng)是1和3了,現(xiàn)在到了個位,個位只能是5以下的數(shù)字
注:如果當前受限,不能夠記憶化,也不能返回記憶化的結(jié)果
為了避免多次調(diào)用時 每次上限不同 而導致的錯亂影響
例題:HDU 3555
題意:a到b中有多少個數(shù)字包含49
思路:
dfs(x,pre,bo,limit)
表示當前位置,前一位的數(shù)字,當前是否已經(jīng)包含49,以及是否有上界
當然,直接搜索肯定TLE,f[x][pre][bo]記憶化即可。
轉(zhuǎn)載于:https://www.cnblogs.com/demian/p/7442215.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的HDU 3555 Bomb (数位DP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子医保卡怎么激活使用(医保电子凭证激活
- 下一篇: CodeForces 731C Sock