C 最大長方形

2021-09-26 14:29:49 字數 1705 閱讀 7862

首先如圖所示,在表t中記錄各元素向上存在多少個連續的乾淨瓷磚。對各列使用動態規劃法可以很輕鬆地求出t。

把錶t的每行都看成乙個直方圖,本題就了求直方圖內最大長方形的問題,於是我們轉為考慮求直方圖中最大長方形的面積。這裡最容易想到的仍然是窮舉法,我們可以列出直方圖的所有端點,求出各個範圍內的最大長方形的面積(以該範圍內最小值為高的長方形的面積)。然後取其中最大值。但是,這個演算法套用到原題中的話,整體的複雜度仍高達o(h平方xw),因此還需要再花些心思。

其實在解這個問題的時候,只要用棧替代陣列記錄區域性問題的解,就能大幅提高求最優解的效率。棧中記錄「仍有可能擴張的長方形的資訊(記為rect)」。rect內含有兩個資訊,乙個是長方形的高 height,另個是其左端的位置pos,首先我們將棧置為空,接下來對直方圖的各個值hi(i=0, 1,…,w-1)。建立以hi為高,以其下標為左端位置的長方形rect,然後進行以下處理。

如果棧為空,將rect入棧如果棧頂長方形的高小於rect的高,將rect壓入棧如果棧頂長方形的高等於rect的高,不作處理如果棧頂長方形的高大於rect的高, 只要棧不為空,且棧頂長方形的高大於等於rect的高,就從棧中取出長方形,同時計算其面積並更新最大值。長方形的長等於「當前位置與之前記錄的「左端位置pos」的差值。將rect壓人棧。另外,這個rect的左端位置pos為最後從棧中取出的長方形的pos值,舉個例子,直方圖的處理過程如下圖所示。

1430 最大的長方形

描述 有m個長方形,在排除正方形的情況下,輸出其中面積最大的長方形的長和寬以及面積。輸入 多組案例。乙個正整數n,表示案例的數量。n 20 每組案例中,先是乙個正整數m,表示長方形 包括正方形 的數量 然後是m組資料,每組資料由兩個正整數組成,表示乙個長方形 也有可能是正方形 相鄰兩邊的長度。m 2...

最小長方形

題目 給定一系列2維平面點的座標 x,y 其中x和y均為整數,要求用乙個最小的長方形框將所有點框在內。長方形框的邊分別平行於x和y座標軸,點落在邊上也算是被框在內。輸入 測試輸入包含若干測試用例,每個測試用例由一系列座標組成,每對座標 x y 佔一行,其中 x 和 y 小於 1000 一對 0,0 ...

最小長方形

題目描述 給定一系列2維平面點的座標 x,y 其中x和y均為整數,要求用乙個最小的長方形框將所有點框在內。長方形框的邊分別平行於x和y座標軸,點落在邊上也算是被框在內。輸入 測試輸入包含若干測試用例,每個測試用例由一系列座標組成,每對座標佔一行,其中 x 和 y 小於 231 一對0 座標標誌著乙個...