На числовому рядку довжини 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я вважаю відповідями. Однак я не можу знайти загальне правило для її вирішення.
Хтось мав якісь ідеї?