主要用於求滿足某條件的最大矩陣
一條豎線,豎線的上端點位於矩陣的上邊界或是乙個障礙點,然後對這條懸線進行左右移動,直到移至障礙點或者是矩陣邊界,進行確定這條懸線所在的極大矩陣。
底線為(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 時,除第一行,每行根據上一行的狀態更新當前狀態,逐行掃一遍。複雜...