P1578 奶牛浴場(懸線 極大值)

2021-09-10 13:56:05 字數 2067 閱讀 2759

原題:

題意:

n*m的矩陣,有幾個點(不是格仔而是座標點),問最大的沒有覆蓋這些點的矩陣。

解析:

首先搞清楚模型,(1,1)和(4,4)是右邊的情況,因為給出的案例下面兩種答案都是80。

這題雖然不能用懸線法(矩陣太大不可能列舉點)來做,但是可以用類似懸線的思想來做。

對答案子矩陣進行分析,四個邊,如果沒有被約束,則會往外擴充套件。所以,四個邊一定被障礙點或大矩形邊界約束,這個就有點極大的意思在裡面了。

先按x值排序。

以乙個點作為左邊界,盡可能的往右延伸。遇到障礙點時調整上下界繼續延伸。

考慮到右邊界,需要用if判斷或將大矩陣的右上和右下放入點集。

但是考慮不到下圖中的情況,所以需要以每個點為右邊界,做一遍往左延伸。

最後一種橫穿的情況,只需要再次按y值排序遍歷即可。

有幾個剪枝:

往右延伸的時候,假設按照當前的上下界,即使延伸到右邊界都不能超過答案就break;

如果遇到和初始點相同的y值時,按理來說會被分解成兩個矩形。但是這兩個矩形可以證明一定會被除當前搜尋外的情況下考慮。下圖中,紅色部分在右邊界障礙點的左延中被考慮,黃色部分在最後按y值排序中,會得到比之更大的解。

// 不能得到更優解

break;}

u = m, d =

0, r = e[i]

.x;for

(int j = i -

1; j >=

1; j--)if

((u - d)

*(r -0)

<= ans)

break;}

}sort

(e +

1, e +

1+ c, cmp)

;for

(int i =

1; i < c; i++

)printf

("%d\n"

, ans)

;}

P1578 奶牛浴場 懸線法 dp

原題 題解 給一些障礙物,求最大矩形的面積,不能覆蓋障礙物。懸線概念 有效豎線 除了兩個端點外,不覆蓋任何障礙點的豎直線段。懸線 上端點覆蓋了乙個障礙點或達到整個矩形上端的有效豎線。每個懸線都與它底部的點一 一對應。每個懸線可以向左右擴充套件就會得到乙個矩形。最大矩形一定在這些矩形中。設 h i j...

題解 P1578 奶牛浴場

題目鏈結 由於john建造了牛場圍欄,激起了奶牛的憤怒,奶牛的產奶量急劇減少。為了討好奶牛,john決定在牛場中建造乙個大型浴場。但是john的奶牛有乙個奇怪的習慣,每頭奶牛都必須在牛場中的乙個固定的位置產奶,而奶牛顯然不能在浴場中產奶,於是,john希望所建造的浴場不覆蓋這些產奶點。這回,他又要求...

洛谷P1578 奶牛浴場

由於john建造了牛場圍欄,激起了奶牛的憤怒,奶牛的產奶量急劇減少。為了討好奶牛,john決定在牛場中建造乙個大型浴場。但是john的奶牛有乙個奇怪的習慣,每頭奶牛都必須在牛場中的乙個固定的位置產奶,而奶牛顯然不能在浴場中產奶,於是,john希望所建造的浴場不覆蓋這些產奶點。這回,他又要求助於cle...