懸線法 學習總結

2021-10-24 10:57:36 字數 674 閱讀 8130

主要用於求滿足某條件的最大矩陣

一條豎線,豎線的上端點位於矩陣的上邊界或是乙個障礙點,然後對這條懸線進行左右移動,直到移至障礙點或者是矩陣邊界,進行確定這條懸線所在的極大矩陣。

底線為(i,j)的懸線

left存每個點能達到的最右位置

right存放每個點能到達的最左邊的位置

height為高度

遞推公式:

height[i,j]=height[i-1,j]+1

left[i,j]=max( left[i-1,j] , (i-1,j)左邊第乙個障礙點位置,邊界0也是障礙點 )

right[i,j]=max( right[i-1,j] , (i-1,j)右邊第乙個障礙點位置,邊界m也是障礙點 )

對於以點(i,j)為底的懸線對應的子矩形,它的面積為(right[i,j]-left[i,j])*height[i,j]

最終的解:

p1169 棋盤製作

p4147 玉蟾宮

下面倆個都是01矩陣求正方形的模板題

p2701 巨大的牛棚

p1387 最大正方形

懸線法 學習筆記

之前的考試包括做題都有用過這個方法,算是個套路了。寫一篇部落格總結一下。懸線法的用途 針對求給定矩陣中滿足某條件的極大矩陣,比如 面積最大的長方形 正方形 周長最長的矩形等等 可以滿足在時間複雜度為o m n 的要求,比一般的列舉高效的多,也易於理解。懸線法的思路 懸線法,懸線的定義,就是一條豎線,...

線性dp之懸線法學習筆記

以前寫過求最大正方形面積的題目,這只要處理 i 1 j i j 1 i 1 j 1 三個位置的最小值就可以,用不到懸線法,簡單的線性dp 但是當要求最大長方形時,那種方法就不適合了,懸線法就出現了 模板題 p4147 玉蟾宮 懸線法可以分為三個部分 l i j 代表位置 i,j 可以往左擴充套件的最...

懸線法DP總結

求滿足某種條件 如01交替 的最大矩形 正方形 先預處理出 ml i j mr i j mt i j 分別表示當前位置 i,j 能向左擴充套件到的最左邊的編號 能向右擴充套件到的最右邊的編號 能向上擴充套件到的最大高度。然後在做 dp 時,除第一行,每行根據上一行的狀態更新當前狀態,逐行掃一遍。複雜...