Sur une ligne numérique de longueur M, où 0 < M <= 1,000,000,000vous 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 secondpoint peut être plus petit que le first).
Supposons maintenant que vous commencez au point 0et que vous disposez d'un chariot pouvant contenir un 1objet. 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 3exemples de cas de test ici:
La réponse au premier test est 12. Tout d'abord, vous prenez l' redarticle 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?