ACM 懸線法總結

2022-07-01 11:45:09 字數 3049 閱讀 2846

一般分為兩種做法:

有乙個n*m的矩陣,初始為白色,裡面有s個黑色格仔,現在問能在矩陣裡面找到的最大不包含

黑色格仔的子矩陣/正方形(n, m<=1000, s<=n*m)

例題:p2701 [usaco5.3]巨大的牛棚big barn(

農夫約翰想要在他的正方形農場上建造一座正方形大牛棚。他討厭在他的農場中砍樹,想找乙個能

夠讓他在空曠無樹的地方修建牛棚的地方。我們假定,他的農場劃分成 n x n 的方格。輸入資料

中包括有樹的方格的列表。你的任務是計算並輸出,在他的農場中,不需要砍樹卻能夠修建的最大

正方形牛棚。牛棚的邊必須和水平軸或者垂直軸平行。

example

考慮下面的方格,它表示農夫約翰的農場,『.'表示沒有樹的方格,『#'表示有樹的方格

1 2 3 4 5 6 7 8

1 . . . . . . . .

2 . # . . . # . .

3 . . . . . . . .

4 . . . . . . . .

5 . . . . . . . .

6 . . # . . . . .

7 . . . . . . . .

8 . . . . . . . .

最大的牛棚是 5 x 5 的,可以建造在方格右下角的兩個位置其中乙個。

line 1: 兩個整數: n (1 <= n <= 1000),農場的大小,和 t (1 <= t <= 10,000)有樹的方格的數量

lines 2..t+1: 兩個整數(1 <= 整數 <= n), 有樹格仔的橫縱座標

只由一行組成,約翰的牛棚的最大邊長。

輸入8 3

2 22 6

6 3輸出

5我們預處理

\(l[i][j]:(i, j)往左連續的最遠'f'的位置\)

\(r[i][j]:(i, j)往右連續的最遠'f'的位置\)

\(up[i][j]:(i, j)往上最大的高度\)

遍歷矩陣然後在每個點dp一下就可以了。

}有乙個n*m的矩陣,初始為白色,裡面有s個黑色格仔,現在問能在矩陣裡面找到的最大不包含

黑色格仔的子矩陣/正方形(n, m<=5000, s<=1000)

由於john建造了牛場圍欄,激起了奶牛的憤怒,奶牛的產奶量急劇減少。為了討好奶牛,john決定在牛場中建造乙個大型浴場。

但是john的奶牛有乙個奇怪的習慣,每頭奶牛都必須在牛場中的乙個固定的位置產奶,而奶牛顯然不能在浴場中產奶,

於是,john希望所建造的浴場不覆蓋這些產奶點。這回,他又要求助於clevow了。你還能幫助clevow嗎?

john的牛場和規劃的浴場都是矩形。浴場要完全位於牛場之內,並且浴場的輪廓要與牛場的輪廓平行或者重合。

浴場不能覆蓋任何產奶點,但是產奶點可以位於浴場的輪廓上。

clevow當然希望浴場的面積盡可能大了,所以你的任務就是幫她計算浴場的最大面積。

輸入檔案的第一行包含兩個整數l和w,分別表示牛場的長和寬。檔案的第二行包含乙個整數n,表示產奶點的數量。

以下n行每行包含兩個整數x和y,表示乙個產奶點的座標。所有產奶點都位於牛場內,即:0<=x<=l,0<=y<=w。

輸出檔案僅一行,包含乙個整數s,表示浴場的最大面積。

10 10

41 1

9 11 9

9 980

說明/提示

0<=n<=5000

1<=l,w<=30000

來自王知昆大佬的**:

return a.yn*m 比較小用dp法

s^2 比較小用擴充套件法

懸線法DP總結

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

關於懸線法

懸線法的模板題,下面主要講懸線法 懸線法思路 懸線的定義,就是一條豎線,這條豎線要滿足上端點在整個矩形上邊界或者是乙個障礙點。然後以這條懸線進行左右移動,直到移至障礙點或者是矩陣邊界,進而確定這條懸線所在的極大矩陣。具體方法 先預處理 用陣列l,r記錄某點向左和向右能到達的最遠點的縱座標。用陣列up...

極大子矩陣 懸線法總結

顧名思義,就是從每乙個點 或者邊界 開始,以此為邊界,開始像用一根豎線一樣不斷移動,在遇到障礙點或邊界時確定出極大子矩陣。核心內容就是確定一條邊界,不斷擴充套件並修改其他邊界 可能有點抽象,做題理解一下就好。在 wzk 大佬的國家隊 用極大化思想解決最大子矩陣問題中有詳細的講解 從題目入手講解 本人...