bzoj1597: [Usaco2008 Mar]土地購買

1597: [Usaco2008 Mar]土地購買

Time Limit: 10 Sec Memory Limit: 162 MB

Description

農夫John準備擴大他的農場,他正在考慮N (1 <= N <= 50,000) 塊長方形的土地. 每塊土地的長寬滿足(1 <= 寬 <= 1,000,000; 1 <= 長 <= 1,000,000). 每塊土地的價格是它的面積,但FJ可以同時購買多快土地. 這些土地的價格是它們最大的長乘以它們最大的寬, 但是土地的長寬不能交換. 如果FJ買一塊3x5的地和一塊5x3的地,則他需要付5x5=25. FJ希望買下所有的土地,但是他發現分組來買這些土地可以節省經費. 他需要你幫助他找到最小的經費.

Input

  • 第1行: 一個數: N

  • 第2..N+1行: 第i+1行包含兩個數,分別爲第i塊土地的長和寬

Output

  • 第一行: 最小的可行費用.

Sample Input

4

100 1

15 15

20 5

1 100

輸入解釋:

共有4塊土地.

Sample Output

500

HINT

FJ分3組買這些土地: 第一組:100x1, 第二組1x100, 第三組20x5 和 15x15 plot. 每組的價格分別爲100,100,300, 總共500.

Source

Gold

分析

這題還是挺有意思的。
首先,這一題涉及分組和max有關的運算,這提示我們可以試試排序後進行劃分dp。
那麼我們將所有的矩形按長遞增進行排序。
然後我們發現,對於2個矩形x和y,如果x的長小於等於y的長,且x的寬小於等於y的寬。
那麼如果將x和y分在一組,那麼購買x肯定是不需要花費額外代價的(x會被其他的矩形完全包含)。
那麼我們就可以將x這個矩形扔掉。
因此我們可以在排序(時間複雜度O(nlog n))之後,我們就可以剔除掉所有沒有用的矩形。顯然剔除掉所有沒有用的矩形後,矩形數組中長是遞增的,寬是遞減的。因此我們可以利用一個單調棧完成剔除操作,時間複雜度O(n)。

進行了這些預處理後,數組具有了單調性,我們也就可以順利寫出dp方程了
記f[i]爲前i個矩形的最小代價,a[i]爲第i個矩形的長,b[i]爲第i個矩形的寬,那麼
f[i]=min{f[j-1]+a[i]*b[j]}
接着就是對方程式變形,最終得到
(f[j-1]-f[k-1])/(b[j]-b[k])>-a[i]時 k優於j
那麼就可以使用斜率優化了

算法的總時間複雜度爲O(nlog n),空間複雜度爲O(n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章