數字dp模版(dp)

2022-03-22 20:47:38 字數 889 閱讀 8228

1 #include 2 #include 3 #include 4 #include 5

6using

namespace

std;78

intt;

9long

long dp[19][19][2005

];10

long

long

l, r;

11int shu[20

];12

13long

long dfs(int len,..., bool

shangxian)

1426

if (!shangxian)

27 dp[len][...] =cnt;

28return

cnt;29}

3031

long

long solve(long

long

x)32

39return dfs(k,...,1)40

}4142int

main()

43

view code

數字dp是一種計數用的dp,一般就是統計乙個區間[l,r]內滿足一些條件數 的個數,所謂數字dp,字面意思就是在數字上dp。數字的含義:乙個數有個位,十位,百位,千位···數的每一位就是數字。

之所以要引入數字的概念完全就是為了dp。數字dp的實質就是換一種暴力列舉的方式,使新的列舉方式滿足dp的性質,然後記憶化即可。

兩種不同的列舉:對於乙個求區間[l,r]滿足條件數的個數,最簡單的暴力如下:

for(int i=l;i<=r;i++)

if(right(i))

ans++;

然而這樣列舉不方便記憶化,或者根本無狀態可言。

數字dp模版

int dfs int i,int s,bool e f為記憶化陣列 i為當前處理串的第i位 權重表示法,也即後面剩下i 1位待填數 s為之前數字的狀態 如果要求後面的數滿足什麼狀態,也可以再記乙個目標狀態t之類,for的時候列舉下t e表示之前的數是否是上界的字首 即後面的數能否任意填 for迴圈...

數字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...

模版 動態 dp

終於來寫這個東西了。lg 模版 給定 n 個點的數,點有點權,m 次修改點權,求修改完後這個樹的最大獨立集大小。我們先來考慮樸素的最大獨立集的 dp dp u 0 sum v max dp u 1 val u sum v dp v 0 現在我們就擁有了乙個 o nm 的做法,但是明顯它不優秀。既然支...