http://pl.spoj.com/problems/SPEEDM/51
Tak się bawię z tym zadankiem i bawię... i mam kilka problemów.
Próbowałem algorytmu zachłannego - z łatwych wyniosłem, że qsort załatwia wszystko. Ale to są średnie i dostaję WA.
Intuicja podpowiada mi, że problem jest do rozwiązania programowaniem dynamicznym. Przeszukiwanie internetów zasugerowało mi, że może to nawet być problem plecakowy: jeżeli policzę sumę wszystkich liczb (S) a następnie sumę podzbioru tych liczb (x) najbliższą połowy sumy wszystkich liczb (x = około S/2), to odemowanie da mi minimum.
Moje pytania:
- Czy intuicja nie zawodzi mnie?
- Jeżeli nie zawodzi, to... jak nauczyć się programowania dynamicznego? Dotychczas stosowałem (raczej nieświadomie) programowanie dynamiczne do rozwalania rekurencji (gdy zadowalało mnie O(n)) typu silnia albo liczby Fibonacciego. Nie wydaje mi się, aby zadanie średnie wymagało ode mnie schematów na poziomie dzikiego konkursu algorytmicznego i problem zapewne jest trywialny. Niestety z przyczyn takich a nie innych nikt w tajniki programowania dynamicznego bezpośrednio nie może mnie wprowadzić. Szczególnie interesuje mnie, czy są jakieś schematy postępowania, gdy problem wydaje się być do rozwiązania programowaniem dynamicznym oraz gdzie takie schematy znaleźć. Przez schemat rozumiem uniwersalne podejście, które pozwala rowiązać problem bądź zbliżyć się do tego rozwiązania - coś jak pierwiastniki dla równania kwadratowego.
Z góry dziękuję za pomoc i przepraszam, jeżeli coś pokićkałem - jestem adeptem a nie mistrzem aglorytmów.
created
last reply
- 13
replies
- 2.1k
views
- 6
users
- 2
likes
- 4
links