2022寒假學長講課

2022-09-20 19:09:07 字數 1644 閱讀 4556

要求:最優子結構:求解 i 需要 j k 兩個狀態,用到的一定是 j k 的最優解

無後效性:

只關心狀態值,不關心狀態是如何推出來的。

狀態一旦確定,不會受到之後階段的決策的影響

只關注 j k 的最優解,而不需要考慮是否有可能使用了公共的資源而導致最終解不合法

常見型別:

序列dp:

狀態 [ i ] 表示前 i 個元素組成的狀態。

狀態 [ i ] 表示用到了第 [ i ] 個元素時組成的狀態。

區間dp:

常見的轉移是列舉中間的斷點 k,拆分成 [ l , k ] 與 [ k + 1 , r ]

有時候可以用四邊形不等式優化

有時候性質特殊,可以從 [ l + 1 , r ] 或者 [ l , r − 1 ] 中的乙個轉移

數字dp:

按照數字的位數劃分狀態進行 dp

一般為求 [l,r] 中滿足條件 p(i) 的數字個數

通常來說上界會很大,暴力列舉會超時(比如 10^18)

條件 p(i) 通常與數字的大小無關,而與數字的組成相關

原始形式 —— f [ i ] [ 0 / 1 ],考慮到數字從高向低第 i 位,前面的數字是否達到上界(如數字上界為1234,前 3 位列舉了 123,則這一位只能列舉 1 ~ 4,而不是 0 ~ 9)

考慮dp時,先設計乙個最簡單的狀態,看看能不能轉移到下一狀態,若無法轉移,則考慮增加維度(如加上之前狀態對當前狀態產生的「影響」)

正推可能比逆推容易

概率dp:

設狀態 f [n] 表示距離目標還差 n 步時的期望

根據每一步決策的概率寫轉移方程 : f [ i ] [ j ] = p ∗ f [ i − 1 ] [ j ] + (1 − p) ∗ f [ i ] [ j − 1 ]

期望:e( x + 1 ) = e( x ) + 1

e( ( x + 1 ) 2 ) = e( x 2 ) + 2 * e( x ) + 1

有可能會自己轉移到自己,這時需要移項代數變形

狀壓dp:

一般會先將所有合法狀態搜出來,然後編上號進行 dp

記憶化搜尋:好寫

優化:轉移過程優化:

單調佇列:

f [ i ] = min + w( i )

l[i] 隨 i 單調不降, w( i ) 是轉移方程組僅和 i 有關的部分,g( j ) 是轉移方程中僅和 j 有關的部分

對於 k < j 有 g( k ) ≥ g( j ),那麼決策 k 就是毫無用處的,用單調佇列維護 遞增

斜率優化:

存在 i j 的交叉項

乙個數列 a 分成若干組,乙個組 [l, r] 的代價為 m + ( ∑( l, r ) ai ) 2,求分組的最小代價。

• f [ i ] = min + m

減少冗餘狀態

根據 dp 方程尋找優化的方法,可以嘗試修改一下狀態的定義

計算過程優化:

部分和優化:字首和

矩陣快速冪:轉移方程中的係數為常係數,轉化為矩陣相乘 o(log n)

狀態設計優化:

交換答案與狀態:

lcs,n ≤ 1e6, m ≤ 1e3 —— 答案與第一維對調,通過預處理 a 的每一位的下乙個 a, b, . . . , z 出現的位置,o(m 2 + 26n)

寒假集訓總結2022

總算是安安靜靜沒有作孽度過了乙個完整的假期 可以說是很有提公升吧,關於省選難度的考試題也在不斷地找手感 波波說,靠聯賽優勢進隊的人很危險,的確說這樣的,所以我聯賽要有優勢,省選也要有優勢 這次集訓可以說是度過了我最特別的乙個生日了吧 本來以為我元宵節的生日,是永遠也不可能在學校過一次了 然而萬惡的疫...

2022寒假集訓day5

day5 五道棧的題加上字串。單調佇列 t1表示式括號匹配 洛谷p1739 假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。一行 ...

2022寒假第一次作業彙總

這個作業屬於哪個課程 2022物件導向程式設計 這個作業要求在 2022面向程式物件設計寒假作業1 這個作業的目標 1 學習markdown語法 2 自我介紹 3 安裝並學學習git的基本使用 4 註冊github賬號,並建立倉庫,編輯自我介紹,並提交commit 5 選擇並配置乙個適合自己的ide...