動態規劃(dynamic programming)是運籌學的乙個分支,是求解決策過程(decision process)最優化的數學方法。20世紀50年代初美國數學家在研究多階段決策過程的優化問題時,提出了最優化原理,把多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解,創立了解決這類過程優化問題的新方法--動態規劃。
——以上內容,節選自baidu
上方內容可以無視,下面為正題:
首先是有關數字dp的內容:
如,解決對於區間 [l,r)求數字中不含某數字的數字的個數的問題:
在資料範圍非常小時——即r<1000000時可以考慮直接用窮舉法,但當資料範圍極大時——r<100000000,窮舉法顯然不合適,在這裡就要考慮數字dp的方法:
分析乙個特殊情況——當r為10的n次方,l=0時,我們可以很輕易的用dp(線性的)的思想求解
如我們可以解出[0,1000);
這時,我們進而可以解得[1000,2000),[2000,3000),[3000,4000).......
於是端點有效數字只有一位且有效數字差一的區間已經可解了,然後我們可以把任意區間分解為我們已經可解的區間(可以理解為提取數字),對於這些小區間求解(應該在之前預處理),然後因加法原理而求和。
在**實現的細節上,不建議真的對[l,r)直接分解,這樣將把**寫得十分複雜,可以考慮求解[0,r)和[0,l)然後作差。
如分解3位數212;
第一位取0時呼叫f(3,0);
取1時呼叫f(3,1);
取2時:
第二位取0時呼叫f(2,0);
取1時:
第三位取0時呼叫f(1,0);
取1時呼叫f(1,1);
取1時呼叫f(1,2);
例題:hdu p2089;
題解見:hdu p2089 題解
動態規劃之數字dp
數字dp,字面意思理解就是在數字的每一位上面去dp,動態規劃一般有兩種 遞推,記憶化搜尋 dfs 這裡就是用的記憶化。一般這種用在計數上面,對那些數字上面有限制的計數。這裡上一道模板題 題中就是要你統計1 n裡有 49 的個數。dp pos sta 表示到第pos位,狀態為sta的總數。我們一般是從...
模板 動態規劃 數字dp
includeusing namespace std define ll long long int a 20 ll dp 20 20 可能需要的狀態1 20 可能需要的狀態2 不同題目狀態不同 ll dfs int pos,int state1 可能需要的狀態1 int state2 可能需要的狀...
有關動態規劃問題DP的詳細講解
首先我們要注意,我們學習dp主要是學一種解決問題的思想,而不是一種演算法。動態規劃的思想 動態規劃是求解多階段決策過程最優化的方法。通過把多階段過程轉化為一系列的單階段問題,利用各階段之間的關係,逐個求解。找到各階段之間的關係是難點。舉個栗子 矩陣取數問題 從矩陣的左上走到右下,每次只能向右或者向下...