題目連結:
e511: 11364 - Parking
給定一正整數 t (1 ≦ t ≦ 100),代表測試資料的筆數。每筆測資佔兩列。第一列給定一正整數 n (1 ≦ n ≦ 20),代表商店的個數;第二列給定 n 個非負整數(皆介於 0 ~ 99 之間),代表這 n 間商店在的座標(於一維數線上)。
今天車子只能停在一維數線上的整數座標點。在最佳的停車策略下,求步行至這 n 個商店去買東西總共的步行距離最小為多少?(不考慮商品的負重問題,可以一直拿在手上)
2
4
24 13 89 37
6
7 30 41 14 39 42
因為不考慮負重問題,所以可以直接一次把 n 個商店的東西買完再回車上。因此,停車的地點一定在座標值最小的商店 S1 ~ 座標值最大的商店 Sn 之間,因為在此之外的地點前去這 n 個商店以及回來的路上都會多走一段路。
接著因為都是一次把 n 個商店逛完才回車上。所以不管停哪裡,走的距離皆相同,都是 Sn - S1 的兩倍。以下是詳細的原因:
假設停在 K (S1 ≦ K ≦ Sn),所以去一趟 S1 的商店也會順便把 Si (對於所有滿足 Si ≦ K 的 i 值)都逛完,然後折返至 K 。總共走 (K - S1)× 2 單位的距離;接著往 Sn 的商店,途中經過 Sj (類似 Si ,但 Sj > K),然後再折返至 K 。總共走 (Sn - K)× 2 單位的距離。
因此,總距離為 (K - S1)× 2 + (Sn - K)× 2 = (Sn - S1) × 2 。
綜上所述,將 n 個商店的座標值排序後,取最小與最大的差值乘以 2 即是所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。