Responsive image Boda Szilárd weblapja

A dinamikus programozás egy, a divide et imperához hasonló módszer, ahol a feladatot részfeladatokra bontjuk, majd a részfeladatok megoldásait tároljuk, így minden részfeladatot csak egyszer oldunk meg. Több típusfeladatnál is használható ez a megoldás:

Fibonacci

A Fibonaccinál csak annyi különbség van az ismert rekurzív megoldáshoz, hogy egy tömbben/map ben tároljuk a már kiszámolt értékeket, s nem számoljuk minding újra.

Minimum erőfeszítésű út egy mátrixban

Adott egy NxN es mátrix, amelyiknek a bal felső sarkából (0,0) kell eljutni a jobb alsó (N-1, N-1) sarkába, úgy, hogy csak jobbra vagy lefelé haladhatunk. Minden cellába eljutni bizonyos erőfeszítésbe kerül, amit az illető mátrix elem tartalmaz. Keressük meg azt az utat, amelyik a legkevesebb erőfeszítésbe kerül s írjuk ki az összerőfeszítést!

Bemenet
  • N=3
  • 1 2 3
  • 4 5 6
  • 7 8 9



Kimenet
  • 21
  • (a legkisebb erőfeszítésű út az 1->2->3->6->9 ennek az összege 21)

Útmutatás a feladatmegoldáshoz:
int cost(int i, int j) {

    if (i == 0 && j == 0) {
        return v[i][j];
    }
    if (i == 0) {
        return v[i][j] + cost(i, j-1);
    }
    if (j == 0) {
        return v[i][j] + cost(i-1, j);
    }
    return v[i][j] + min(cost(i-1,j), cost(i,j-1));
}