牛客网dp专题 数位dp
文章目錄
- 數位dp
- 例題:
- NC116652 uva11038 How many 0's
- NC15035 送分了QAQ
- NC20669 詭異數字
- NC20665 7的意志
- NC17385 Beautiful Numbers
- CF55D NC108918 Beautiful numbers
- 習題:
- NC17867 明七暗七
- NC19327 好朋友
- NC19945 [CQOI2016]手機號碼
- NC20268 [SCOI2009]WINDY數
- NC20287 [SCOI2012]BLINKER的仰慕者
- NC20293 [SCOI2013]數數
- NC20298 [SCOI2014]方伯伯的商場之旅
- NC20491 [ZJOI2010]COUNT 數字計數
- NC210885 計數問題
數位dp
例題:
NC116652 uva11038 How many 0’s
題目:輸入a和b,求a到b的所有數之中有多少0出現
題解:
先算個位,個位是0的情況有x種
再算十位,十位是0的情況有y種
…
一共是x+y+…
用數位dp做
dp[i]中存的是從0~99…9(共i個9)中0的個數(不含前導0)
dp0[i]中存放的是00…0~99…9(共i個0,i個9)中0的個數(含前導0)
dp0[i]=dp0[i-1] * 10+power * (10,i-1)
dp[i]=dp[i-1]+dp0[i-1]*9
NC15035 送分了QAQ
每次給出一個區間[n,m],求包含38或者4的數字的個數
題解:
dp[i][st]從高到低數第i為對應的情況為st的數字個數,
st=0表示沒有4也沒有38
st=1表示有38或者4但當前位是3
dt=2表示有4或者38
dp[i][0]=9*dp[i-1][0]-dp[i-1][1]
dp[i][1]=dp[i-1][0]
dp[i][2]=dp[i-1][2]*10+dp[i-1][1]+dp[i-1][0]
邊界:dp[0][0]=1
NC20669 詭異數字
題目:
一個區間[l,r]和多個約束,約束為數字x在數字串中連續出現的次數不能大于len,求出這個區間內滿足這些約束的數字個數(不含前導0)x為0~9
題解:
dp[i][x][cnt]表示從高往低第i位的數字是x,且x已經連續出現了cnt次的合法數字個數
代碼:
模板
NC20665 7的意志
題目:
定義一個序列:7,77,777,7777…7777777…
如果一個整數能被序列a中的任意一個數字整除,并且其數位之和為序列a中任意一個數字的倍數,那么這個數字就含有7的意志,給定范圍[n,m]問有多少數有7的意志
1<n<m<1e18
題解:
%7,%77…=0,所以只用%7即可
dp[pos][pre][sum] 前pos位的數的和%7的余數為pre,數位和%7為sum的個數
NC17385 Beautiful Numbers
F(x)為x各個位數的和
求x%F(x)==0的數的個數(最多12位)
題解:
dp[pos][x][mod][sum]表示前pos位數除以x的余數為mod,且前pos位的和為sum的數字個數
x從0~12*9枚舉
CF55D NC108918 Beautiful numbers
區間[l,r]中有多少數能夠整除他自身各位數,也就等價于在區間[l,r]中有多少數能夠整除他自身各位數的最小公倍數
習題:
題目地址
NC17867 明七暗七
NC19327 好朋友
NC19945 [CQOI2016]手機號碼
NC20268 [SCOI2009]WINDY數
NC20287 [SCOI2012]BLINKER的仰慕者
NC20293 [SCOI2013]數數
NC20298 [SCOI2014]方伯伯的商場之旅
NC20491 [ZJOI2010]COUNT 數字計數
NC210885 計數問題
總結
以上是生活随笔為你收集整理的牛客网dp专题 数位dp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定点数(fixed-point numb
- 下一篇: Neat Tree