集中做完了插頭$dp$
寫一下題解。
一開始學的時候還是挺矇的。
不過後來站在輪廓線$dp$的角度上來看就簡單多了。
其實就是一種聯通性$dp$,只不過情況比較多而已了。
本來轉移方式有兩種。逐行和逐格轉移。
不過逐行轉移因為分類太多所以被捨棄了。
一般的插頭$dp$採用逐格轉移。
插頭表示已經進入當前格仔的狀態,而並不是將要進入的狀態。
狀態的表示方式常見的有兩種:最小表示法和括號表示法。
括號表示法不如說是廣義括號表示法的特殊一種情況,每個插頭也就是左右括號就是表示兩個相匹配的迴路部分,而最小表示法則是一般的廣義括號匹配,只是括號只是單純的表示一條線路的兩端。
1.$ural 1519 formula 1$
括號表示法裸題。
設兩個插頭,1表示左括號,2表示右括號。
分一下類就可以了。
0.0 如果是障礙格仔就直接轉移,如果是普通格仔就可以開兩個新的左右括號。
下面的討論均在非障礙格仔下。
0.1|0.2|1.0|2.0 將插頭下移或者右移。
1.1|2.2 首先將兩個插頭消除,找到其中乙個插頭匹配的插頭,並將之改成這兩個插頭。
2.1 消除插頭。
1.2 在最後乙個非障礙格仔更新答案。
2.$city$
跟上一題一模一樣,不過是限定了轉移的方向而已。
3.郵遞員
仍然是括號表示法。
其實和第一題仍然沒什麼區別,就是要遍歷所有的地方,並且形成迴路,注意到迴路的順逆時針走向是不同方案,所以最後答案*2。
4.地板
這個就是最小表示法了。
設兩個插頭1,2分別表示沒拐過和拐過彎的$l$形狀,要求沒有障礙物的部分都鋪磚。
那麼開始分類討論。
如果沒有障礙物:
0.0 -> 1.0|0.1|2.2 表示當前點伸出能夠從兩個方向伸出兩個可以拐彎的,或者根本就把這個點當作轉折點,那兩個方向都不可以拐彎。
0.1 -> 0.1|2.0
1.0 -> 1.0|0.2
0.2 -> 0.2|0.0 如果沒有其他插頭,並且在最後乙個非障礙格仔可以更新答案。
2.0 -> 2.0|0.0 如果沒有其他插頭,並且在最後乙個非障礙格仔可以更新答案。
1.1 -> 0.0 兩個沒拐彎的匹配上了。
2.2 -> 無法轉移
1.2 -> 無法轉移
5.標識設計
其實和上乙個題幾乎一模一樣。
只不過在最後新增一維表示當前已經出現了的$l$有幾個。
如果已經出現了的有$3$個並且當前這個格仔可以作為其中某乙個的結束位置,那麼更新答案。
6.神奇遊樂園
和第一題一模一樣就是把求方案改成了求最值。
7.$manhattan wiring$
這個題由於確定了起點和終點,所以不需要用到括號匹配。
只用兩個插頭表示是哪個線的插頭即可。
8.$parkii$
看起來是括號匹配,其實是最小表示法
和神奇遊樂園大體上一樣,是cdq的**題了。
我們考慮新加入乙個獨立插頭表示一條獨立的路徑,
由於這次要求路徑,所以會麻煩一點,這裡的左右括號就不僅僅表示迴路的兩頭了,而是表示一條路徑的兩頭,這就是所謂一般性廣義括號表示法,也就是最小表示法。
左右括號轉移大體上和神奇遊樂園一樣。
多出來的獨立插頭設為3。
多出來的轉移就是:
0.0 -> 0.3|3.0
0.3|3.0 -> 0.3|3.0 如果只有乙個插頭的話就可以更新答案了。
3.1|3.2|1.3|2.3 -> 0.0 清空當前兩個括號,然後把1或者2對應的括號改為3。
3.3 -> 如果只有這兩個括號的話就可以更新答案了,不轉移。
暫時這麼多。
插頭Dp總結
題目大意 給出n m的方格,有些格仔不能鋪線,其它格仔必須鋪,可以形成多個閉合迴路。問有多少種鋪法?插頭dp板子題,題目要求可以是多個迴路,只需要兩個狀態,代表是否有插頭即可 plug 1 plug 2 0 0 新建乙個插頭插向兩邊 0 1 轉 不轉彎 1 0 同上 1 1 合併插頭 題目大意 乙個...
插頭DP總結
從跳樓到蒙b。插頭dp,電源插頭dp,工業插頭dp,插座dp。額我們先將一些技能的,比如說hash表,這年頭連hash表都不會打,簡直就是yasi。hash使用乙個表頭加鍊表的結構實現陣列的使用。比如說要統計值域到1e9的一列數出現次數,顯然我們就把一列數壓一下,比如模乙個質數同餘的放在一起,然後把...
插頭DP 入門
強烈推薦 hdu 1693 eat the trees 多迴路的不用判聯通狀態,二進位制即可,轉移情況2 2種。時間o n m 2 n 空間o n 2 n 插頭dp include include const int maxm 13 const int maxn 1 12 typedef long ...