На числовому рядку довжини M
, де 0 < M <= 1,000,000,000
ви вказали N
( 1 < N <= 100,000
) цілі пари пар точок. У кожній парі перша точка відображає те, де зараз знаходиться об'єкт, а друга точка - куди слід перемістити об’єкт. (Майте на увазі, second
точка може бути меншою за точку first
).
Тепер припустимо, що ви починаєте з пункту 0
і маєте візок, який може вмістити 1
об'єкт. Ви хочете перемістити всі об'єкти з їх початкових позицій у відповідні кінцеві позиції, проїжджаючи найменшу відстань уздовж рядка числення ( не зміщення). Ви повинні закінчитись на точці M
.
Зараз я намагаюся звести цю проблему до більш простої проблеми. Якщо чесно кажучи, я навіть не можу думати про грубі сили ( можливо, жадібні) рішення. Однак моя перша думка полягала в тому, щоб переробити рух назад на два рухи вперед, але це, здається, не працює у всіх випадках.
Я накреслив ці 3
зразки тестових випадків тут:
Відповідь на перший TestCase є 12
. Спочатку ви забираєте red
предмет у точці 0
. Потім ви переходите до точки 6
(відстань = 6
), red
тимчасово опускаєте предмет, а потім піднімаєте green
предмет. Потім ви переходите до точки 5
(відстань = 1
) і опускаєте green
предмет. Потім ви переходите назад до точки 6
(відстань = 1
) і піднімаєте red
предмет, який ви упустили, переходите до точки 9 (відстань = 3
), а потім переходите до точки 10
(відстань = 1
), щоб закінчити послідовність.
Загальна пройдена відстань становила 6 + 1 + 1 + 3 + 1 = 12
мінімально можливу відстань.
На два інші випадки 12
я вважаю відповідями. Однак я не можу знайти загальне правило для її вирішення.
Хтось мав якісь ідеї?