Potrzebuję pomocy w związku z tym problemem ICPC ACM. Mój obecny pomysł polega na zamodelowaniu tego jako problemu najkrótszej ścieżki, który jest opisany w opisie problemu.
Problem
Istnieją N = 1000
pojemniki na odpady nuklearne umieszczone wzdłuż linii liczbowej 1-D w różnych pozycjach od -500,000 to 500,000
, z wyjątkiem x=0
. Osoba ma za zadanie zebrać wszystkie kosze na śmieci. Co sekundę, gdy pojemnik na śmieci nie jest zbierany, emituje 1 jednostkę promieniowania. Osoba zaczyna od x = 0
i może przemieszczać 1
jednostkę co sekundę, a zbieranie odpadów zajmuje niewiele czasu. Chcemy znaleźć minimalną ilość promieniowania uwalnianego podczas zbierania wszystkich pojemników.
Przykładowe dane wejściowe:
4
Kontenery znajdujące się przy ul [-12, -2, 3, 7]
.
Najlepszym sposobem na odbiór tych pojemników jest [-2, 3, 7, -12]
minimalna emisja 50
jednostek. Wyjaśnienie: osoba idzie do -2
w ciągu 2 sekund i w tym czasie 2 units
promieniowania są emitowane. Następnie idzie do 3
(odległość 5
:), aby lufa uwolniła 2 + 5 = 7
jednostki promieniowania. Potrzebuje 4
więcej sekund, aby dotrzeć do x = 7
miejsca, w którym ta beczka wyemitowała 2 + 5 + 4 = 11
jednostki. Zajmuje 19
sekundy, aby dotrzeć do x = -12
miejsca, w którym ta beczka emitowała 2 + 5 + 4 + 19 = 30
jednostki. 2 + 7 + 11 + 30 = 50
, która jest odpowiedzią.
Uwagi
Istnieje oczywiste O(N!)
rozwiązanie. Jednak badałem chciwe metody, takie jak przejście do najbliższej lub przejście do najbliższej gromady, ale te nie zadziałały.
Długo zastanawiałem się nad tym problemem i zamodelowałem go jako problem z wyszukiwaniem wykresów:
- Wstawiamy
0
jako pozycję wyjściową (będzie to stan początkowy) - Następnie sortujemy pozycje od najmniejszej do największej.
- Następnie wykonujemy BFS / PFS, na który
state
składa się- Dwie liczby całkowite
l
ir
które stanowią ciągły zakres w posortowanej tablicy pozycji, które już odwiedził - Liczba całkowita,
loc
która mówi nam, czy jesteśmy na lewym, czy na prawym punkcie końcowym zakresu - Liczba całkowita,
time
która pokazuje nam upływ czasu - Całkowity „koszt”, który mówi nam całkowity koszt do tej pory (na podstawie odwiedzonych węzłów)
- Dwie liczby całkowite
- Z każdego stanu możemy przejść do [l - 1, r] i [l, r + 1], odpowiednio modyfikując pozostałe 3 liczby całkowite
- Stan końcowy to [0, N], sprawdzanie obu pozycji końcowych.
Wydaje się jednak, że [L, R, loc]
nie definiuje ono jednoznacznie stanu i musimy przechowywać L, R, loc, and time
, minimalizując cost
przy każdym z nich. Prowadzi to do algorytmu wykładniczego, który jest wciąż zbyt wolny dla jakiegokolwiek dobra.
Czy ktoś może mi pomóc rozwinąć pomysł lub popchnąć go we właściwym kierunku?
Edycja: Może to może być modelowane jako problem z optymalizacją programowania dynamicznego? Myśląc o tym, ma te same problemy, co rozwiązanie do wyszukiwania wykresów - tylko dlatego, że prąd cost
jest niski, nie oznacza, że jest to optymalna odpowiedź na ten problem podrzędny, ponieważ time
również ma duży wpływ na odpowiedź.
Chciwość nie działa: mam chciwy algorytm selekcji, który szacuje koszt przeniesienia do określonego miejsca (np. Jeśli ruszymy w prawo, podwajamy odległości do lewej beczki i tak dalej).
Czy możesz przeprowadzić wyszukiwanie z priorytetem za pomocą heurystyki? Heurystyka mogłaby połączyć koszt bieżącej podróży z upływem czasu.