Algorytm dynamiczny służy do rozwiązywania problemów, dla których zachodzi taki warunek:
Dany problem można obliczyć korzystając z wyników z mniejszych podproblemów tego
problemu.
Licząc rozwiązanie danego nam problemu liczymy najpierw rozwiązania
wszystkich mniejszych podproblemów i na koniec korzystając z wcześniejszych wyników
liczymy końcowy wynik dla całego problemu. Poniżej opiszę jeden z wielu algorytmów
dynamiczny. (jeden z najprostszych)
Mamy daną podłużną planszę o długości n. Niektóre pola są na niej zablokowane, mamy
jednak gwarancję, że pole nr 1 ani pole nr n nie są zablokowane. Mamy powiedzieć na ile
sposobów możemy dojść z pola 1 na pole n nie wchodząc na żadne zablokowane pole, jeśli
możemy naraz przejść 1 pole lub 2 pola.
Na początku ustawiamy wartość w polu nr 1 na 1 (możemy tam dojść na dokładnie 1 sposób -
od razu tam jesteśmy). Potem jeżeli pole nr 2 nie jest zablokowane to ustawiamy je na 2
(możemy 2 razy skoczyć o 1 lub raz skoczyć o 2). Następnie dla każdego niezablokowanego
pola wynikiem będzie dyn[i-1]+dyn[i-2], gdzie dyn to tablica gdzie przechowujemy
wyniki dla każdego kolejnego pola, a i to numer pola, które aktualnie rozpatrujemy.
Pole zablokowane jest oznaczone jako Z, a pole wolne jest oznaczone jako W. Zasymulujmy
nasz algorytm dla przykładowej planszy:
WWWWZW
1 2 3 4 5 6 (indeksy w tablicy z wynikami)
0 0 0 0 0 0 (wartości w tablic z wynikami)
1 0 0 0 0 0
1 2 0 0 0 0
1 2 3 0 0 0
1 2 3 5 0 0
1 2 3 5 0 0 (natrafiliśmy na zablokowane pole)
1 2 3 5 0 5
Tutaj kończymy nasz algorytm (doszliśmy do ostatniego pola). Wynikiem dla tego przykładu
będzie 5.