En una recta numérica de longitud M, donde 0 < M <= 1,000,000,000, le dio N( 1 < N <= 100,000) pares enteros de puntos. En cada par, el primer punto representa dónde se encuentra actualmente un objeto y el segundo punto representa dónde se debe mover un objeto. (Tenga en cuenta que el secondpunto puede ser más pequeño que el first).
Ahora, suponga que comienza en el punto 0y tiene un carrito que puede contener 1objetos. Desea mover todos los objetos desde sus posiciones iniciales a sus respectivas posiciones finales mientras recorre la menor distancia a lo largo de la recta numérica ( no desplazamiento). Tienes que terminar a punto M.
Ahora, he estado tratando de reducir este problema a un problema más simple. Para ser sincero, ni siquiera puedo pensar en una solución de fuerza bruta ( posiblemente codiciosa). Sin embargo, mi primer pensamiento fue degenerar un movimiento hacia atrás a dos movimientos hacia adelante, pero eso no parece funcionar en todos los casos.
Dibujé estos 3casos de prueba de muestra aquí:
La respuesta al primer caso de prueba es 12. Primero, recoges el redartículo en el punto 0. Luego te mueves al punto 6(distancia = 6), sueltas el redartículo temporalmente y luego lo recoges green. Luego te mueves al punto 5(distancia = 1) y sueltas el greenelemento. Luego regresa al punto 6(distancia = 1) y recoge el redelemento que dejó caer, vaya al punto 9 (distancia = 3), luego vaya al punto 10(distancia = 1) para finalizar la secuencia.
La distancia total recorrida fue 6 + 1 + 1 + 3 + 1 = 12, que es la distancia mínima posible.
Los otros dos casos tienen respuestas 12, creo. Sin embargo, no puedo encontrar una regla general para resolverlo.
¿Alguien tiene alguna idea?