Em uma linha numérica de comprimento M, em que 0 < M <= 1,000,000,000você 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 secondponto pode ser menor que o first).
Agora, suponha que você comece no ponto 0e tenha um carrinho que possa conter 1objetos. 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 3casos de teste de amostra aqui:
A resposta para o primeiro caso de teste é 12. Primeiro, você escolhe o reditem no ponto 0. Então você vai para o ponto 6(distância = 6), solta o reditem temporariamente e, em seguida, pega o greenitem. Então você vai para o ponto 5(distância = 1) e solta o greenitem. Então você volta ao ponto 6(distância = 1) e pega o reditem 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?