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

動態(tài)規(guī)劃——狀壓DP 學(xué)習(xí)筆記

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

動態(tài)規(guī)劃——狀壓DP 學(xué)習(xí)筆記

引入

前置知識:位運(yùn)算

動態(tài)規(guī)劃的過程是隨著階段的增長,在每個狀態(tài)維度上不斷擴(kuò)展的。

在任意時刻,已經(jīng)求出最優(yōu)解的狀態(tài)與尚未求出最優(yōu)解的狀態(tài)在各維度上的分界點(diǎn)組成了 DP 擴(kuò)展的“輪廓”。對于某些問題,我們需要在動態(tài)規(guī)劃的“狀態(tài)”中記錄一個集合,保存這個“輪廓”的詳細(xì)信息,以便進(jìn)行狀態(tài)轉(zhuǎn)移。

若集合大小不超過 \(N\),集合中每個元素都是小于 \(K\) 的自然數(shù),則我們可以把這個集合看作一個 \(N\)\(K\) 進(jìn)制數(shù),以一個 \([0, K^{N - 1}]\) 之間的十進(jìn)制整數(shù)的形式作為 DP 狀態(tài)的一維。這種把集合轉(zhuǎn)化為整數(shù)記錄在 DO 狀態(tài)中的一類算法,就被稱為狀態(tài)壓縮的動態(tài)規(guī)劃算法。

定義

意義

狀態(tài)壓縮,即在數(shù)據(jù)范圍較小的情況下,將每個物品或者東西選與不選的狀態(tài)壓縮為一個整數(shù)的方法。

狀態(tài)壓縮,即以最小代價來表示某種狀態(tài)的方式,通常是用一串二進(jìn)制數(shù)(\(01\) 串)來表示各個元素的狀態(tài),通常我們稱這些情況叫做子集、設(shè)為 \(S\)。

然而還有其他的狀壓方法,例如三進(jìn)制狀壓法等等,但不大常用。

本質(zhì)

所以狀壓 DP,本質(zhì)上是與 DP 無異的,它沒有改變 DP 本質(zhì)的優(yōu)化方法,階段還是要照分,狀態(tài)還是老樣子,決策依舊要做,轉(zhuǎn)移方程還是得列,最優(yōu)還是最優(yōu),無后性還是無后性,所以它還是比較好理解的。所以最明顯的標(biāo)志就是數(shù)據(jù)不能太大,大約是 \(n \le 20\)

遍歷所有狀態(tài)的正確姿勢就是用二進(jìn)制的位運(yùn)算來遍歷。這大概就是狀壓 DP 的精髓了吧!

應(yīng)用

什么時候用?

  • 數(shù)據(jù)范圍:范圍在 \(20\) 左右時正常的狀壓;很多時候會有一些 NP 問題會用狀壓求解。
  • 是否可以壓縮:一般的狀態(tài)壓縮都是選擇或者不選擇,放或者不放,遇見這種東西一般時狀壓。
  • 常見題目模型:比如 TSP,覆蓋問題之類的。經(jīng)常會有這種模型的題出現(xiàn)就可以使用狀壓。

狀態(tài)設(shè)計(jì)

在使用狀壓 DP 的題目當(dāng)中,往往能一眼看到一些小數(shù)據(jù)范圍的量,切人點(diǎn)明確。而有些題,這樣的量并不明顯,需要更深人地分析題目性質(zhì)才能找到。

  1. 狀態(tài)跟某一個信息集合內(nèi)的每一條都有關(guān)。
  2. 若干條精簡而相互獨(dú)立的信息壓在一起處理。(如每個數(shù)字是否出現(xiàn))

例題:旅行商(TSP)問題

狀態(tài)壓縮最經(jīng)典的問題應(yīng)該就是旅行商問題了。

問題描述

旅行商問題(Travelling Salesman Problem,TSP),給定一系列城市和每對城市之間的距離,求解訪問每一座城市一次并回到起始城市的最短回路。

如何運(yùn)用狀態(tài)壓縮

比如一共有 \(5\) 個點(diǎn):\(\{1\:2\:3\:4\:5\}\)。現(xiàn)在要表示已經(jīng)走過的地方和沒走過的地方,我們可以用 \(\{0, 1\}\) 來表示。其中 \(0\) 表示沒到過,\(1\) 表示到達(dá)過。那么對應(yīng)的狀態(tài)有:

1 2 3 4 5
0 0 0 0 0(剛要開始走,還沒有到達(dá)的地方)
0 0 0 0 1(已經(jīng)到過第五個點(diǎn))
0 0 0 1 0(已經(jīng)到過第四個點(diǎn))
0 0 0 1 1(已經(jīng)到過第四,五個點(diǎn))
......

我們發(fā)現(xiàn)以上的狀態(tài)可以用二進(jìn)制數(shù)表示,二進(jìn)制數(shù)就是由 \(\{0, 1\}\) 組成的。并且 \(2^5\) 可以涵蓋所有的情況,從 \(0\:0\:0\:0\:0\)\(1\:1\:1\:1\:1\);

\(dp[i][S]\) 表示走到 \(i\) 這個點(diǎn),已經(jīng)經(jīng)過的地方為 \(S\),此時所走過的最短路。

狀態(tài)轉(zhuǎn)移

舉個栗子,當(dāng) \(S = (11011)_{\mathrm B}\) 的時候,\(S\) 可以是由 \(11001\) 來,也可以是從 \(11010\) 來:

for (int j = 1; j <= n; ++j) {
    if (i == j || (s & (1 << (j - 1))) == 0) continue;
    dp[i][s] = min(dp[i][s], dp[j][s - (1 << (i - 1))] + dis(i, j));
}

練習(xí)題

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

Reference

[1] https://www.luogu.com.cn/blog/new2zy/zhuang-ya-zhuang-ya-post
[2] https://www.luogu.com.cn/blog/yijan/zhuang-ya-dp
[3] https://www.luogu.com.cn/blog/DestinHistoire/zhuang-tai-ya-su-dp
[4] https://www.cnblogs.com/maoyiting/p/13368682.html
[5] https://blog.csdn.net/qq_44579321/article/details/129489274
[6] https://blog.csdn.net/weixin_44254608/article/details/105761281文章來源地址http://www.zghlxwxcb.cn/news/detail-710481.html

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

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

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

相關(guān)文章

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

    引入 數(shù)位 DP 往往都是這樣的題型:給定一個區(qū)間 ([l, r]) ,求這個區(qū)間中滿足某種條件的數(shù)的總數(shù)。 簡單的暴力代碼如下: 而當(dāng)數(shù)據(jù)規(guī)模過大,暴力枚舉就 (mathbb T) 飛了,因此引入數(shù)位 DP: 概念 數(shù)位(digit):對于十進(jìn)制,即把一個數(shù)字按照個位、十位、百位等,一位

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

    前置知識:矩陣、矩陣乘法。 斐波那契數(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); 所以我們設(shè)矩陣 (F_i = begin{bmatrix} f_{i - 1} f_{i - 2} end{bmatrix}) 。 設(shè)矩陣 (text{Ba

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

    動態(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)
  • 動態(tài)規(guī)劃——帶權(quán)二分優(yōu)化DP 學(xué)習(xí)筆記

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

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

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

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

    對于最優(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\\\') 時,有 (jle j\\\') ,則稱該 DP 問題具有決策單調(diào)性。 即: (i) 單增,其最優(yōu)轉(zhuǎn)移點(diǎn)單調(diào)不減。 如何發(fā)現(xiàn)一個轉(zhuǎn)移方程具有決策

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

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

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

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

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

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

    2024年02月05日
    瀏覽(20)
  • 動態(tài)規(guī)劃(DP)學(xué)習(xí)和思考

    動態(tài)規(guī)劃(DP)學(xué)習(xí)和思考

    最近在備戰(zhàn)藍(lán)橋杯,感覺藍(lán)橋杯很多題目都可以嘗試用暴力搜索,暴力枚舉的方法嘗試得出最終的結(jié)果,但是暴力的方式效率并不是很高,而且容易超時。在以前學(xué)回溯算法的時候,也是一臉懵,不理解IndexStart到底什么意思,不知道如何去找參數(shù)和遞歸邏輯,好在通過慢慢的

    2024年04月09日
    瀏覽(14)
  • 算法基礎(chǔ)復(fù)盤筆記Day10【動態(tài)規(guī)劃】—— 線性DP

    算法基礎(chǔ)復(fù)盤筆記Day10【動態(tài)規(guī)劃】—— 線性DP

    ? 作者主頁:歡迎來到我的技術(shù)博客?? ? 個人介紹:大家好,本人熱衷于 Java后端開發(fā) ,歡迎來交流學(xué)習(xí)哦!( ̄▽ ̄)~* ?? 如果文章對您有幫助,記得 關(guān)注 、 點(diǎn)贊 、 收藏 、 評論 ?????? ?? 您的支持將是我創(chuàng)作的動力,讓我們一起加油進(jìn)步吧?。。???? 1. 題目

    2023年04月21日
    瀏覽(32)
  • 動態(tài)規(guī)劃-閆氏老方!中華老字號(DP筆記)

    動態(tài)規(guī)劃-閆氏老方!中華老字號(DP筆記)

    b站視頻 ?? Tips:求有限集中的最值 樸素寫法 優(yōu)化空間之后的寫法 怎么說呢,就是原來第二個算式是f[i][j] = max(f[i][j], f[i - 1][j - v[i]] + w[i]),注意 f[i - 1] [j - v[i]],需要i-1,也就是前一個。 要是從左往右邊算的話,?(假如我們來到了第四行,正在計(jì)算f[5]需要用到f[4]的數(shù)據(jù))

    2024年04月29日
    瀏覽(13)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包