Na linii liczbowej długości M, gdzie 0 < M <= 1,000,000,000podałeś N( 1 < N <= 100,000) liczby całkowite par punktów. W każdej parze pierwszy punkt reprezentuje miejsce, w którym aktualnie znajduje się obiekt, a drugi punkt reprezentuje miejsce, w którym należy przenieść obiekt. (Pamiętaj, że secondpunkt może być mniejszy niż first).
Załóżmy, że zaczynasz od punktu 0i masz wózek, który może pomieścić 1przedmiot. Chcesz przenieść wszystkie obiekty z ich początkowych pozycji do odpowiednich końcowych pozycji podczas podróży najmniejszą odległości wzdłuż linii liczbowej ( nie przesunięcia). Musisz skończyć na punkcie M.
Teraz staram się zredukować ten problem do prostszego. Szczerze mówiąc, nie mogę nawet wymyślić rozwiązania brutalnej siły ( być może zachłannego). Jednak moją pierwszą myślą było zdegenerowanie ruchu wstecz do dwóch ruchów do przodu, ale nie wydaje się to działać we wszystkich przypadkach.
Narysowałem tutaj 3przykładowe przypadki testowe:
Odpowiedź na pierwsze testcase jest 12. Najpierw podnosisz redprzedmiot w punkcie 0. Następnie przejdź do punktu 6(odległość = 6), redtymczasowo upuść element, a następnie podnieś greenelement. Następnie przejdź do punktu 5(odległość = 1) i upuść greenelement. Następnie wróć do punktu 6(odległość = 1) i podnieś redupuszczony przedmiot, przejdź do punktu 9 (odległość = 3), a następnie przejdź do punktu 10(odległość = 1), aby zakończyć sekwencję.
Całkowity przebyty dystans wynosił 6 + 1 + 1 + 3 + 1 = 12minimalną możliwą odległość.
12Wierzę, że pozostałe dwa przypadki mają odpowiedzi . Nie mogę jednak znaleźć ogólnej zasady, aby ją rozwiązać.
Czy ktoś ma jakieś pomysły?