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