Sur une ligne numérique de longueur M
, où 0 < M <= 1,000,000,000
vous avez donné N
( 1 < N <= 100,000
) des paires entières de points. Dans chaque paire, le premier point représente l'endroit où se trouve actuellement un objet et le deuxième point représente l'endroit où un objet doit être déplacé. (Gardez à l'esprit que le second
point peut être plus petit que le first
).
Supposons maintenant que vous commencez au point 0
et que vous disposez d'un chariot pouvant contenir un 1
objet. Vous souhaitez déplacer tous les objets de leurs positions initiales à leurs positions finales respectives tout en parcourant la moindre distance le long de la ligne numérique ( pas de déplacement). Vous devez vous retrouver sur le point M
.
Maintenant, j'ai essayé de réduire ce problème à un problème plus simple. Pour être honnête, je ne peux même pas penser à une solution de force brute ( éventuellement gourmande). Cependant, ma première pensée a été de dégénérer un mouvement vers l'arrière en deux mouvements vers l'avant, mais cela ne semble pas fonctionner dans tous les cas.
J'ai dessiné ces 3
exemples de cas de test ici:
La réponse au premier test est 12
. Tout d'abord, vous prenez l' red
article au point 0
. Ensuite, vous vous déplacez au point 6
(distance = 6
), déposez l' red
élément temporairement, puis ramassez l' green
élément. Ensuite, vous vous déplacez au point 5
(distance = 1
) et déposez l' green
élément. Ensuite, vous revenez au point 6
(distance = 1
) et ramassez l' red
élément que vous avez déposé, vous déplacez au point 9 (distance = 3
), puis vous déplacez au point 10
(distance = 1
) pour terminer la séquence.
La distance totale parcourue était 6 + 1 + 1 + 3 + 1 = 12
, qui est la distance minimale possible.
Les deux autres cas ont des réponses 12
, je crois. Cependant, je ne trouve pas de règle générale pour le résoudre.
Quelqu'un a une idée?