數字dp可不是對於數的每一位進行dp,而是指對於這個數的組成進行dp。對於數的每一位進行dp,只是數字dp的一類題目。
【題目描述】
現在有兩個要求:
這是乙個 n(n
≤106
)n(n \leq 10^6)
n(n≤10
6)位的數(不含前導零)
相鄰的兩位的差值大於等於 p(p
≤9
)p(p \leq 9)
p(p≤9)
問有多少個數滿足該要求。
【題解】
顯然,我們不能去列舉這個數,畢竟他的位數是高精度級別的,但是很顯然可以從每一位入手。
定義dp陣列f[i
][j]
f[i][j]
f[i][j
]表示這個數的第 i
ii 位為 j
jj、前 i
ii 位都滿足要求時有多少種方案。
於是得出很顯然的轉移方程:
f [i
][j]
+=f[
i−1]
[k](
abs(
k−j)
≥p
)f[i][j]+=f[i-1][k]~~(abs(k-j)\geq p)
f[i][j
]+=f
[i−1
][k]
(abs
(k−j
)≥p)
這就是數字dp的入門了。
數字dp其中的乙個難點,是如何統計答案。
接下來,看一下和這道題很像的一道題。
【scoi2009】windy數
【題目描述】
windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。 windy想知道,在a和b之間,包括a和b,總共有多少個windy數?
題解 (原諒我水訪問量)
hnoi 2002 kathy 函式
題解sdoi 2010 **拍賣會 題解
如果還有什麼好題的話,以後一(da)定(gai)會擺上來的。
數字DP小結
download.csdn.net detail u012959992 8892265 一般是求小於等於數字n的某些特徵數字個數,或者是區間 l,r 的之間的某些特徵數字個數,後者一般可以轉換成求差的方式來做。數字處理函式int f int num return dfs pos,s true dig...
數字dp小結
在這裡寫個總結吧 對於數字dp,之前學的時候,學得很唬,現在又學了一發,還是感覺這個東西不是很好掌控.這個東西有他的思想,當然也有一定的套路和模板,我大概可以掌握模板,了解了一些套路,對他的思想也有了一些認識.雖然說思想是根本,但是掌握套路和模板也是必不可少的,不過只知道套路和模板對於一些比較活的題...
數字DP小結
數字dp是用來解決一段區間內,存在多少個數滿足某個數的性質的問題 題目中輸入的數可能會爆int,一般為0 a b 2 10 9 數字dp中處理的是每乙個數的位,而不是這個數的本身 也就是說1024,2024在後面三位在性質上是一樣的,所以dp會儲存這三位的狀態 這樣就節省了時間複雜度 一般來說,數字...