Em uma linha numérica de comprimento M
, em que 0 < M <= 1,000,000,000
você forneceu N
( 1 < N <= 100,000
) pares inteiros de pontos. Em cada par, o primeiro ponto representa onde um objeto está localizado atualmente e o segundo ponto representa para onde um objeto deve ser movido. (Lembre-se de que o second
ponto pode ser menor que o first
).
Agora, suponha que você comece no ponto 0
e tenha um carrinho que possa conter 1
objetos. Você deseja mover todos os objetos de suas posições iniciais para suas respectivas posições finais enquanto percorre a menor distância ao longo da linha numérica ( não deslocamento). Você tem que acabar no ponto M
.
Agora, estou tentando reduzir esse problema para um problema mais simples. Para ser sincero, nem consigo pensar em uma solução de força bruta ( possivelmente gananciosa). No entanto, meu primeiro pensamento foi degenerar um movimento para trás em dois movimentos para frente, mas isso não parece funcionar em todos os casos.
Eu desenhei esses 3
casos de teste de amostra aqui:
A resposta para o primeiro caso de teste é 12
. Primeiro, você escolhe o red
item no ponto 0
. Então você vai para o ponto 6
(distância = 6
), solta o red
item temporariamente e, em seguida, pega o green
item. Então você vai para o ponto 5
(distância = 1
) e solta o green
item. Então você volta ao ponto 6
(distância = 1
) e pega o red
item que caiu, passa ao ponto 9 (distância = 3
) e depois ao ponto 10
(distância = 1
) para finalizar a sequência.
A distância total percorrida foi 6 + 1 + 1 + 3 + 1 = 12
, que é a distância mínima possível.
Os outros dois casos têm respostas 12
, acredito. No entanto, não consigo encontrar uma regra geral para resolvê-lo.
Alguém tem alguma idéia?