P3049 [USACO12MAR]Landscaping S
這篇部落格我要單獨寫!
思想:貪心的把到當前位置先補齊
假設:i,j,k,p是位置
i j k p
少 多 少 多
------------------------------------------------------------
i位置缺少
第0步:
花費x
------------------------------------------------------------
j位置是多出來,如果轉移更優,則滿足
(j - i) * z < x(把i位置及填滿需要這麼多錢) + y(把j位置多的去掉需要這麼多)
“把j位置多的去掉的更少花費”
v = (j-i)*z - x
觀察
v = (j-i) * z - x
= j*z - (x + i*z) //括號裡的和什麼相關:
//1.i位置填滿需要的花費,2.i位置(i*z)
v累加進答案中
這裡先不說完整的做法,繼續推理,從下面的推導過程讓“最終的方法”付出水面
------------------------------------------------------------
k位置是缺少的,如果轉移更優,則滿足
(k - j) * z < v(把j位置多的去掉的更少花費) + x(把k位置填滿)
//把k位置填滿的更少花費
w = (k - j) * z - v
= k*z - (v + j*z)//括號裡的和什麼相關:1.j位置去掉需要的花費,2.j位置有關(j*z)
找到規律:選擇前面“多餘”的位置中最大的 "花費 + 位置*z",進行交換
累加進答案中,並且 k*z + w 放入“缺少”大根堆
如果轉移不優,則
(k - j) * z > v(把j位置多的去掉的更少花費) + x(把k位置填滿)
則把x累加到答案中
k*z + x 放入大根堆
------------------------------------------------------------
p位置是多出來的,如果轉移更優,則滿足
(p - k) * z < w(把k位置填滿的更少花費) + y(p位置去掉)
r = (p - k) * z - w
= p * z - (k*z + w) //括號裡的和什麼相關:1.k位置填滿需要的花費,2.k位置有關(k*z)
找到規律:選擇前面“缺少”的位置中最大的"花費 + 位置*z",進行交換
累加進答案中,並且 p*z + r 放入"多餘"大根堆