Problem
在一個二維平面中,灑落 N 個垃圾,機器人從原點 (0, 0) 依序要蒐集垃圾,機器人一次承載 W 重量的垃圾,隨時可以返回原點將垃圾放下。
請問依序收集垃圾的最少花費為何?
Sample Input
|
|
Sample Output
|
|
Solution
一開始得到方程式 dp[i] = min(dp[j-1] + cost[j, i] + dist[j] + dist[i])
必須滿足 w[j, i] <= C
,其中 j <= i。
其中 dp[i]
表示依序收集前 i 個垃圾的最小花費,cost[j, i]
表示走訪編號 j 到 i 垃圾位置的花費,補上原點到編號 j,並且收集完從 i 回到原點。
這樣的方程式轉換需要 N^2
時間,化簡一下式子
|
|
會發現 i, j 獨立,也滿足垃圾重量累計遞增,因此盡可能保留 dp[j-1] - cost[j] + dist[j]
小的結果,並且重量不超過限制,當重量超過限制時,該組答案在隨後保證再也不會用到,直接捨棄之。
核心就是單調隊列的思路。
|
|