Su una linea numerica di lunghezza M, dove 0 < M <= 1,000,000,000, hai dato N( 1 < N <= 100,000) coppie intere di punti. In ciascuna coppia, il primo punto rappresenta dove si trova attualmente un oggetto e il secondo punto rappresenta dove dovrebbe essere spostato un oggetto. (Tieni presente che il secondpunto potrebbe essere più piccolo del first).
Ora, supponi di iniziare dal punto 0e di avere un carrello che può contenere 1oggetti. Volete spostare tutti gli oggetti dalle loro posizioni iniziali alle rispettive posizioni finali mentre percorrete la minima distanza lungo la linea numerica ( non spostamento). Devi finire sul punto M.
Ora, ho cercato di ridurre questo problema a un problema più semplice. Ad essere sincero, non riesco nemmeno a pensare a una soluzione di forza bruta ( forse avida). Tuttavia, il mio primo pensiero è stato di degenerare un movimento all'indietro in due movimenti in avanti, ma ciò non sembra funzionare in tutti i casi.
Ho disegnato questi 3esempi di casi di prova qui:
La risposta al primo testcase è 12. Innanzitutto, raccogli l' redoggetto al punto 0. Quindi vai al punto 6(distanza = 6), rilascia l' redoggetto temporaneamente, quindi raccogli l' greenoggetto. Quindi si passa al punto 5(distanza = 1) e si rilascia l' greenoggetto. Quindi torni al punto 6(distanza = 1) e raccogli l' redoggetto che hai lasciato cadere, passa al punto 9 (distanza = 3), quindi passa al punto 10(distanza = 1) per completare la sequenza.
La distanza totale percorsa era 6 + 1 + 1 + 3 + 1 = 12, che è la distanza minima possibile.
Gli altri due casi hanno risposte 12, credo. Tuttavia, non riesco a trovare una regola generale per risolverlo.
Qualcuno ha qualche idea?