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 = 1000pojemniki 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 = 0i może przemieszczać 1jednostkę 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:
4Kontenery znajdujące się przy ul [-12, -2, 3, 7].
Najlepszym sposobem na odbiór tych pojemników jest [-2, 3, 7, -12]minimalna emisja 50jednostek. Wyjaśnienie: osoba idzie do -2w ciągu 2 sekund i w tym czasie 2 unitspromieniowania są emitowane. Następnie idzie do 3(odległość 5:), aby lufa uwolniła 2 + 5 = 7jednostki promieniowania. Potrzebuje 4więcej sekund, aby dotrzeć do x = 7miejsca, w którym ta beczka wyemitowała 2 + 5 + 4 = 11jednostki. Zajmuje 19sekundy, aby dotrzeć do x = -12miejsca, w którym ta beczka emitowała 2 + 5 + 4 + 19 = 30jednostki. 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
0jako 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
stateskłada się- Dwie liczby całkowite
lirktóre stanowią ciągły zakres w posortowanej tablicy pozycji, które już odwiedził - Liczba całkowita,
locktóra mówi nam, czy jesteśmy na lewym, czy na prawym punkcie końcowym zakresu - Liczba całkowita,
timektó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 costprzy 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 costjest niski, nie oznacza, że jest to optymalna odpowiedź na ten problem podrzędny, ponieważ timeró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.