數字DP模板

2021-08-30 19:46:51 字數 966 閱讀 3704

數字dp問題,大多是統計數量,通常用按位處理的方法解決。

具體為:詢問[l,

r]

[l,r]

[l,r

]中滿足某一條件的數。利用字首和的思想,我們可以把問題簡化,即轉化為詢問[1,

r]

[1,r]

[1,r]和[1,

l−1]

[1,l-1]

[1,l−1

]。實現時,常常使用記憶化搜尋,由於有很多限制條件,所以常常增加幾維狀態,即是否有前導零等標記。

這裡是博主@wust_wenhao的數字dp模板:

typedef

long

long ll;

int a[20]

;ll dp[20]

[state]

;//不同題目狀態不同

ll dfs

(int pos,

/*state變數*/

,bool lead/*前導零*/

,bool limit/*數字上界變數*/

)//不是每個題都要判斷前導零

//計算完,記錄狀態if(

!limit &&

!lead) dp[pos]

[state]

=ans;

/*這裡對應上面的記憶化,在一定條件下時記錄,保證一致性,當然如果約束條件不需要考慮lead,這裡就是lead就完全不用考慮了*/

return ans;

}ll solve

(ll x)

return

dfs(pos-

1/*從最高位開始列舉*/

,/*一系列狀態 */

,true

,true);

//剛開始最高位都是有限制並且有前導零的,顯然比最高位還要高的一位視為0嘛

}int

main()

}

先鴿一下,以後再填坑

數字DP入門 數字DP模板

數字dp是一種計數用的dp,一般就是要統計乙個區間 le,ri 內滿足一些條件數的個數。所謂數字dp,字面意思就是在數字上進行dp咯。數字還算是比較好聽的名字,數字的含義 乙個數有個位 十位 百位 千位.數的每一位就是數字啦!之所以要引入數字的概念完全就是為了dp。數字dp的實質就是換一種暴力列舉的...

數字dp 模板

dp pos,狀態變數.限制布林 if limit dp 狀態 a 已經求出對應狀態值下的結果了 記錄下來 return a 所以 數字dp其實就是一種求解有關於l到r有多少個符合條件的數目類似的統計問題的解題思路 一遍遍數字列舉太慢 不如我們根據條件列舉數字 數字dp本質上是記憶化搜尋 我們需要在...

數字dp模板

typedef long long ll int a 20 ll dp 20 state 不同題目狀態不同 ll dfs int pos,state變數 bool lead 前導零 bool limit 數字上界變數 不是每個題都要判斷前導零 計算完,記錄狀態 if limit lead dp po...