Ogólne podejście
Będziemy rozpatrywać kolejne miecze od pierwszego i obliczać dla nich największą możliwą do uzyskania wartość przy założeniu, że chcemy uzyskać też (już obliczone) wartości mieczy o mniejszych numerach.
Podproblem
Zanim zajmiemy się obliczaniem tych maksymalnych wartości, zastanówmy się nad następującym podproblemem. Powiedzmy, że mamy dany ciąg i naszym zadaniem jest tylko stwierdzić, czy jesteśmy w stanie uzyskać zestaw mieczy taki, żeby wartość -tego miecza była równa przynajmniej .
Zdefiniujmy nowy graf, w którym wierzchołek oznacza parę (miasto, podzbiór mieczy), przy czym podzbiór mieczy oznacza miecze, dla których osiągnęliśmy już zamierzony cel. Dla każdej krawędzi sprawdzamy, jaki podzbiór mieczy osiąga cel, i tworzymy przejście między wierzchołkami: dla krawędzi z do oraz wyliczonym dla niej podzbiorem . Na tym nowym grafie możemy wykorzystać algorytm BFS z wierzchołka aby sprawdzić, czy jesteśmy w stanie dotrzeć do wierzchołka z pełnym zbiorem mieczy po co najwyżej krokach. Ten podproblem rozwiązaliśmy w czasie .
Wyszukiwanie binarne
Powiedzmy, że chcemy obliczyć wynik dla -tego miecza i znamy już wartości . Możemy wyszukiwać binarnie szukaną wartość : możemy sprawdzić, czy zachodzi , poprzez rozwiązanie podproblemu dla . Ważnym jest, aby rozwiązywać ten podproblem przy założeniu, że jest tylko mieczy (zamiast ), ponieważ pozostałe nie wpływają na szukaną wartość . Wtedy uzyskamy złożoność .
Rozwiązanie wzorcowe
Korzystając ze wspomnianego podproblemu, trudno jest uzyskać rozwiązanie lepsze niż to z wyszukiwaniem binarnym. Chcemy, aby rozwiązanie podproblemu dawało nam więcej informacji. Załóżmy, że mamy obliczone już wartości . Chcielibyśmy teraz dla każdej krawędzi stwierdzić, czy jesteśmy w stanie przejść daną krawędzią na jakiejś ścieżce długości co najwyżej z do , uzyskując wartości na mieczach . W tym celu obliczymy za pomocą BFS odległości z wierzchołka oraz odległości z wierzchołka . Nazwijmy je oraz , gdzie to numer miasta, a to podzbiór mieczy. Następnie dla krawędzi z do sprawdzamy, czy , gdzie jest pełnym zbiorem mieczy. Aby nie przeglądać każdej pary oraz wystarczy sprawić, aby tablica oznaczała minimalną liczbę kroków potrzebną do uzyskania co najmniej zbioru mieczy w mieście . Po takiej poprawce wystarczy dla pojedynczej krawędzi przeiterować się po każdym zbiorze i przyjąć za dopełnienie do zbioru wszystkich mieczy. To rozwiązanie działa w analogiczny sposób w złożoności .