1. 程式人生 > 其它 >最大靠牆矩形 題解 (單調性)

最大靠牆矩形 題解 (單調性)

s表示所有木條的總長度,用w表示牆的對邊的長度。根據均值不等式,在w∈[0,s]的範圍內,面積w(s-w)/2是關於 w 的單峰函式,且最值在 w = s時取得

這個題比較難。

兩個極為重要的性質:

不論如何鋸木頭,矩形總有一條邊是原木棍拼成的。

對於總長度為n的一堆木棍,使用一次鋸木頭的機會的條件下總可以把它變為兩根任意 長的木棍,且兩根木棍的總長度為n。

那麼問題就迎刃而解了,用原木棍拼成的那個木棍組成的那一條邊是牆的對邊或者鄰邊:

對於對邊:

我們知道面積是一個關於對邊的二次函式,設木棍總長度為n,我們只需要對邊的長度 最接近n/2即可(二次函式),剩餘的其它木棍可以組成另外兩條相同的邊。

至於如何找到這個最接近n/2的長度,木棍才40根,當然是搜尋了。

不過直接搜尋顯然會超時(40!),所以我們把原木棍分為兩堆分別搜尋出它們可能拼 接成的所有長度並用陣列存下來。

將第一堆的可能結果從小到大排序,第二堆的可能結果從大到小排序。然後可以利用其 單調性用走指標的方式(大了就第二堆指標加,小了就第一堆指標加)就可以求出最接 n/2的長度是多少。

對於鄰邊

和對邊一樣的方法。

最難的地方:

double大概只能精確儲存2^50左右大小的數字,當其太大的時候,精度會有損失。

本題的答案太大導致不能用double直接輸出,顯然答案的小數要麼是.0要麼是.5,需要把答案轉為long long通過特判的方式輸出小數點。