国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

動(dòng)態(tài)規(guī)劃——數(shù)位DP 學(xué)習(xí)筆記

這篇具有很好參考價(jià)值的文章主要介紹了動(dòng)態(tài)規(guī)劃——數(shù)位DP 學(xué)習(xí)筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

動(dòng)態(tài)規(guī)劃——數(shù)位DP 學(xué)習(xí)筆記

定義

引入

數(shù)位 DP 往往都是這樣的題型:給定一個(gè)區(qū)間 \([l, r]\),求這個(gè)區(qū)間中滿足某種條件的數(shù)的總數(shù)。

簡(jiǎn)單的暴力代碼如下:

int ans = 0;
for(int i = l; i <= r; ++i)
    if(check(i)) ++ans;

而當(dāng)數(shù)據(jù)規(guī)模過大,暴力枚舉就 \(\mathbb T\) 飛了,因此引入數(shù)位 DP:

概念

數(shù)位(digit):對(duì)于十進(jìn)制,即把一個(gè)數(shù)字按照個(gè)位、十位、百位等,一位一位地拆開,它每一位上的數(shù)字,也就是 \(0 \sim 9\);其他進(jìn)制可類比十進(jìn)制。

數(shù)位 DP:一種按照數(shù)位暴力枚舉的方式,用來解決一類特定問題;這種問題比較好辨認(rèn),一般具有這幾個(gè)特征:

  1. 提供一個(gè)數(shù)字區(qū)間(有時(shí)也只提供上界)來作為統(tǒng)計(jì)的限制;
  2. 統(tǒng)計(jì)滿足某種條件的數(shù)的數(shù)量,有時(shí)也有統(tǒng)計(jì)總和、平方和等的;
  3. 上界很大,甚至?xí)?\(10^{18}\) 這么大,暴力枚舉驗(yàn)證會(huì)超時(shí);
  4. 這些條件經(jīng)過轉(zhuǎn)化后可以使用「數(shù)位」的思想去理解和判斷。

原理

例如,當(dāng)我們?cè)跀?shù)數(shù)的過程中,\(100 \sim 199\)\(200 \sim 299\) 這兩部分,后兩位是完全相同的,這種重復(fù)計(jì)算可以通過 DP 的方式進(jìn)行優(yōu)化。

實(shí)現(xiàn)

計(jì)數(shù)原理

數(shù)位 DP 中通常會(huì)利用常規(guī)計(jì)數(shù)問題技巧,比如把一個(gè)區(qū)間內(nèi)的答案拆成兩部分相減,即查分的思路:

$ans_{[l, r]} = s_r - s_{l - 1}$.

一般根據(jù)是否計(jì)入 \(0\) 的貢獻(xiàn),將 \(s_k\) 定義為:\(\sum[0, k]\)\(\sum[1, k]\).

數(shù)的存儲(chǔ)

一般將數(shù)字中較低位存在數(shù)組的低位之中,即:

typedef long long ll;
ll solve(ll x) {
    int len = 0;
    while (x) a[++len] = x % 10, x /= 10;
    return dfs(...); //記憶化搜索
}

常用形參

統(tǒng)計(jì)答案可以選擇記憶化搜索,也可以選擇循環(huán)迭代遞推;因?yàn)閿?shù)位 DP 的預(yù)處理一般比較變態(tài),所有我一般使用記憶化搜索。

常用的形式參數(shù)如下:

  1. pos(int):表示當(dāng)前枚舉的位置,一般從 \(\mathrm{len}\) 開始,到 \(0\) 為止。
  2. limit(bool):表示當(dāng)前枚舉到的位置,可以填的數(shù)是否收到限制;若為 true,則該位最大填 \(a_{pos}\);否則最大填 \(R-1\),其中 \(R\) 表示枚舉的進(jìn)制數(shù)。
  3. sum(int):表示從 \(\mathrm{len}\)\(pos + 1\) 位的貢獻(xiàn),常用的有求和等。
  4. last(int):表示上一位填的數(shù),當(dāng)題目限制連續(xù)的兩個(gè)(或多個(gè))數(shù)位有條件限制的話常用。
  5. lead0(bool):表示從 \(\mathrm{len}\)\(pos + 1\) 是否都為 \(0\)(前導(dǎo)零)。
  6. r(int):表示從 \(\mathrm{len}\)\(pos + 1\) 這個(gè)前綴模一個(gè)數(shù) \(\bmod\) 的結(jié)果,也可以表示數(shù)位和取模的結(jié)果。
  7. st(bool):常用與狀態(tài)壓縮,其二進(jìn)制表示某一位是否滿足某一條件等。

如何復(fù)用結(jié)果

簡(jiǎn)單分析可知,一定是已經(jīng)求解過中,狀態(tài)與當(dāng)前狀態(tài)相同的,可以復(fù)用,如 pos、sum、last 相同等;特殊的,當(dāng) limit == 1lead0 == 1 時(shí),即當(dāng)前位受到限制時(shí),無需記錄狀態(tài),因?yàn)檫@一狀態(tài)不會(huì)頻繁的復(fù)用,這種空間換時(shí)間價(jià)值不大。

即:

typedef long long ll;
ll f[N][M]; // DP 數(shù)組,第一維表示枚舉到的數(shù)位,第二維表示當(dāng)前的狀態(tài);默認(rèn)為 -1
ll dfs(int pos, bool limit, int sum) {
    if (!pos) return sum;
    if (!limit && f[pos][sum] != -1) return f[pos][sum];
    int up = limit ? a[pos] : 9;
    ll res = 0; for (int i = 0; i <= up; ++i)
        res = (res + dfs(pos - 1, limit && i == up, sum + i)) % MOD;
    if (!limit) f[pos][sum] = res;
    return res;
}

習(xí)題

見:https://www.luogu.com.cn/training/384691

Reference

[1] https://oi-wiki.org/dp/number/
[2] https://blog.csdn.net/hzf0701/article/details/116717851
[3] https://blog.csdn.net/m0_63726942/article/details/127060217文章來源地址http://www.zghlxwxcb.cn/news/detail-710446.html

到了這里,關(guān)于動(dòng)態(tài)規(guī)劃——數(shù)位DP 學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 動(dòng)態(tài)規(guī)劃——區(qū)間DP 學(xué)習(xí)筆記

    不含四邊形不等式優(yōu)化。 線性動(dòng)態(tài)規(guī)劃的局限性在于,它只能順推或倒退,而不能有子區(qū)間依賴的問題。 區(qū)間動(dòng)態(tài)規(guī)劃是線性動(dòng)態(tài)規(guī)劃的擴(kuò)展,它將問題劃分為若干個(gè)子區(qū)間,并通過定義狀態(tài)和狀態(tài)轉(zhuǎn)移方程來求解每個(gè)子區(qū)間的最優(yōu)解,最終得到整個(gè)區(qū)間的最優(yōu)解。 區(qū)間動(dòng)

    2024年02月08日
    瀏覽(31)
  • 動(dòng)態(tài)規(guī)劃——狀壓DP 學(xué)習(xí)筆記

    前置知識(shí):位運(yùn)算 動(dòng)態(tài)規(guī)劃的過程是隨著階段的增長(zhǎng),在每個(gè)狀態(tài)維度上不斷擴(kuò)展的。 在任意時(shí)刻,已經(jīng)求出最優(yōu)解的狀態(tài)與尚未求出最優(yōu)解的狀態(tài)在各維度上的分界點(diǎn)組成了 DP 擴(kuò)展的“輪廓”。對(duì)于某些問題,我們需要在動(dòng)態(tài)規(guī)劃的“狀態(tài)”中記錄一個(gè)集合,保存這個(gè)“

    2024年02月08日
    瀏覽(25)
  • 動(dòng)態(tài)規(guī)劃——樹形DP 學(xué)習(xí)筆記

    前置知識(shí):樹基礎(chǔ)。 樹形 DP,即在樹上進(jìn)行的 DP,最常見的狀態(tài)表示為 (f_{u,cdots}) ,表示以 (u) 為根的子樹的某個(gè)東東。 本文將講解一些經(jīng)典題目(樹的子樹個(gè)數(shù)、樹的最大獨(dú)立集、樹的最小點(diǎn)覆蓋、樹的最小支配集、樹的直徑、樹的重心、樹的中心),以及一些常見形

    2024年02月08日
    瀏覽(22)
  • 動(dòng)態(tài)規(guī)劃——矩陣優(yōu)化DP 學(xué)習(xí)筆記

    前置知識(shí):矩陣、矩陣乘法。 斐波那契數(shù)列 在斐波那契數(shù)列當(dāng)中, (f_1 = f_2 = 1) , (f_i = f_{i - 1} + f_{i - 2}) ,求 (f_n) 。 而分析式子可以知道,求 (f_k) 僅與 (f_{k - 1}) 和 (f_{k - 2}) 有關(guān); 所以我們?cè)O(shè)矩陣 (F_i = begin{bmatrix} f_{i - 1} f_{i - 2} end{bmatrix}) 。 設(shè)矩陣 (text{Ba

    2024年02月08日
    瀏覽(24)
  • 動(dòng)態(tài)規(guī)劃——斜率優(yōu)化DP 學(xué)習(xí)筆記

    動(dòng)態(tài)規(guī)劃——斜率優(yōu)化DP 學(xué)習(xí)筆記

    適用于求解最優(yōu)解(最大、最?。﹩栴}。 可以將轉(zhuǎn)移方程可以化為 (left[begin{array}{rl} 僅與 space i space 有關(guān) 是我們想要最大/最小化的 \\\\ 僅與 space j space 有關(guān) 是已知的 \\\\ 與 space i space 和 space j space 都有關(guān) 是兩項(xiàng)相乘 end{array}right]) 三部分的, 都可以考慮用斜率優(yōu)化

    2024年02月08日
    瀏覽(19)
  • 「學(xué)習(xí)筆記」數(shù)位 DP

    意義不大的題不寫了。 點(diǎn)擊查看目錄 目錄 「學(xué)習(xí)筆記」數(shù)位 DP 概述 例題 P2657 [SCOI2009] windy 數(shù) 思路 代碼 P4317 花神的數(shù)論題 思路 P4124 [CQOI2016]手機(jī)號(hào)碼 思路 代碼 haha數(shù) 題意 思路 代碼 0和1的熟練 題意 思路 代碼 蒼與紅的試煉 題意 思路 代碼 數(shù)位 DP 一般用來解決「在一個(gè)較

    2023年04月09日
    瀏覽(23)
  • 動(dòng)態(tài)規(guī)劃——帶權(quán)二分優(yōu)化DP 學(xué)習(xí)筆記

    動(dòng)態(tài)規(guī)劃——帶權(quán)二分優(yōu)化DP 學(xué)習(xí)筆記

    帶權(quán)二分其實(shí)并不一定用于優(yōu)化 DP,也可能用于優(yōu)化貪心等最優(yōu)化的算法。 帶權(quán)二分也叫 WQS 二分,最初由王欽石在他的 2012 年國(guó)家集訓(xùn)隊(duì)論文中提出。 使用情況 要解決一個(gè)最優(yōu)化問題(求最大 / 最小值) 有一個(gè)限制,一般是某個(gè)參數(shù)要求一定恰好為 (k) 而帶權(quán)二分就可以

    2024年02月08日
    瀏覽(24)
  • 動(dòng)態(tài)規(guī)劃——決策單調(diào)性優(yōu)化DP 學(xué)習(xí)筆記

    動(dòng)態(tài)規(guī)劃——決策單調(diào)性優(yōu)化DP 學(xué)習(xí)筆記

    對(duì)于最優(yōu)性問題,常有狀態(tài)轉(zhuǎn)移方程: (f_i = min/max{f_jdots}) , 形象的:如果 (i) 的最優(yōu)轉(zhuǎn)移點(diǎn)是 (j) , (i\\\') 的最優(yōu)轉(zhuǎn)移點(diǎn)是 (j\\\') ,當(dāng) (ii\\\') 時(shí),有 (jle j\\\') ,則稱該 DP 問題具有決策單調(diào)性。 即: (i) 單增,其最優(yōu)轉(zhuǎn)移點(diǎn)單調(diào)不減。 如何發(fā)現(xiàn)一個(gè)轉(zhuǎn)移方程具有決策

    2024年02月08日
    瀏覽(25)
  • AcWing算法學(xué)習(xí)筆記:動(dòng)態(tài)規(guī)劃(背包 + 線性dp + 區(qū)間dp + 計(jì)數(shù)dp + 狀態(tài)壓縮dp + 樹形dp + 記憶化搜索)

    AcWing算法學(xué)習(xí)筆記:動(dòng)態(tài)規(guī)劃(背包 + 線性dp + 區(qū)間dp + 計(jì)數(shù)dp + 狀態(tài)壓縮dp + 樹形dp + 記憶化搜索)

    算法 復(fù)雜度 時(shí)間復(fù)雜度0(nm) 空間復(fù)雜度0(nv) 代碼 算法 通過滾動(dòng)數(shù)組對(duì)01背包樸素版進(jìn)行空間上的優(yōu)化 f[i] 與 f[i - 1]輪流交替 若體積從小到大進(jìn)行遍歷,當(dāng)更新f[i, j]時(shí),f[i - 1, j - vi] 已經(jīng)在更新f[i, j - vi]時(shí)被更新了 因此體積需要從大到小進(jìn)行遍歷,當(dāng)更新f[i, j]時(shí),f[i - 1,

    2024年02月21日
    瀏覽(21)
  • 動(dòng)態(tài)規(guī)劃(DP)(算法筆記)

    動(dòng)態(tài)規(guī)劃(DP)(算法筆記)

    本文內(nèi)容基于《算法筆記》和官方配套練題網(wǎng)站“晴問算法”,是我作為小白的學(xué)習(xí)記錄,如有錯(cuò)誤還請(qǐng)?bào)w諒,可以留下您的寶貴意見,不勝感激。 動(dòng)態(tài)規(guī)劃(Dynamic Programming,DP)是一種用來解決一類最優(yōu)化問題的算法思想。簡(jiǎn)單來說,動(dòng)態(tài)規(guī)劃將一個(gè)復(fù)雜的問題分解成若干個(gè)子

    2024年02月05日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包