演算法筆記 數字dp

2022-05-05 15:54:08 字數 1191 閱讀 1438

·前言

當我們遇到某些題目的時候(比如像讓你統計l——r這乙個區間內的數字和以及滿足條件的數有幾個這一類的題目),常常會因為區間太大而無法計算。這時候,我們就需要用上我們偉大的數字dp啦!

數字dp的實質就是換一種暴力列舉的方式,使得新的列舉方式滿足dp的性質,然後記憶化就可以了。(nm這本質上不還是記憶化搜尋)

(ps:雖然說數字dp是可以用正常的遞推演算法來寫的,但是遞推不僅難想還難調的一批,沒準就一不小心人就沒了,還是用記憶化搜尋板子攻克這一切吧)

(pps:記憶化搜尋背個板子就好,但是特別難查錯qwq)

·基本思維

由於遞推版的數字dp本質上就是個找規律列舉狀態的過程,其實和記憶化搜尋差不了多少(而且我不會寫qaq)。所以該篇博就講記憶化搜尋的方法就over了……

考慮一下列舉每一位(pos)的數字(記得確定一下上界(limit)qwq),以及在中途判斷是否存在有前導零(lead),接下來就可以愉快地記憶化搜尋啦~

state狀態需要根據題目的不同而確定哦qwq

給個板子趴(

#includeusing

namespace

std;

int a[20

];long

long dp[20

][state];

long

long dfs(int pos,int state,bool lead,bool

limit)

if(!limit&&!lead)dp[pos][state]=ans;

return

ans;

}long

long solve(long

long

x)

return dfs(pos,1,1);}

intmain()

view code

·題目彙總

hdu3652 b-number

01 luogu4317/bzoj3209 

02 bzoj 1833 zjoi2010 count

03 hdu4734 f(x)

04 codeforces 55d beautiful number

05 2012 multi-university training contest 6 xhxj』s lis

06 hdu4507 

*依舊莫得鏈結,以後把題解整出來再說吧qwq

演算法筆記 數字dp小結

入門ppt link1 記憶化方式 link2 link3 1 2 記憶化的數字dp 通常而言,有四個引數必須 dp pos,flag,limit pos表示當前正在列舉的數字。flag標誌已經列舉的字首是否某種性質 前面的數字和,是否含有某個數,前乙個列舉的數等等。當然flag可以有多個。limi...

DP專題 學習筆記 數字 DP

目錄3.練習題 update 2021 2 23 最近作者發現數字 dp 的 f 陣列初始化有問題,導致 出現了根本性錯誤 原理不變 現在已經糾正,對各位讀者造成的困擾深表歉意。數字 dp,是一種 dp 廢話 專門用於數字統計類問題。這種問題首次接觸可能會有些難理解,但是練過幾道題之後就會掌握套路了...

學習筆記 數字DP的dfs寫法

跟著洛谷 走,演算法習題全都有!嗯,沒錯,這次我也是看了洛谷 的第84期才學會這種演算法的,也感謝mathison大佬,素不相識,卻寫了一長篇文章來幫助我學習這個演算法。感覺dfs版的數字dp還是挺簡單的,直接dp然後遞推統計答案的那種比它搞腦子多了。在dfs版本中,我們需要特別注意的地方有兩個 1...