Documente Academic
Documente Profesional
Documente Cultură
Metoda napoi
Datorit faptului c este una din cele mai complexe tehnici de programare, vom acorda o
atenie mrit acestei modaliti de tratare a programelor, atenie nsoit de un numr mare de
exemple. Ele sunt n majoritate de facturi diferite, i constituie un bun punct de pornire n
formarea unei gndiri dinamice.
Programarea dinamic este o tehnic de programare de nivel nalt n sens c necesit o
mbinare ntre intuiie i rigurozitate matematic.
n general, termenul de "principiul optimalitii" semnific urmtoarele: atunci cnd vrem s
obinem o situaie favorabil dintr-un anumit punct de vedere, este bine ca ea s rezulte tot din
spaii favorabile.
Suma maxim divizibil cu n
Se citete n numr natural i n-numere naturale. Se cere s se tipreasc cea mai
mare sum care se poate forma utiliznd cele n numere naturale (fiecare numr poate
participa o singur dat n calculul sumei) i care se divide cu n precum i numerele care
alctuiesc aceast sum.
De exemplu: pentru n=5; numerele citite: (2,3,4,9,3).
Avem S=15 i numerele care o alctuiesc (2,4,9).
Observaia 1: Aceasta nu este singura sum care se poate forma, de
exemplu S1=5, (2,3). S poate fi format i cu alte numere (3,9,3). Cu
toate acestea soluia data nu ndeplinete condiiile din enun.
Observaia 2: Problema admite ntotdeauna soluie.
n general, avem 2 n submulimi ale unei mulimi cu n elemente (acest numr include i
submulimea vid). Dac am considera toate aceste sume pentru a o alege pe cea care
ndeplinete condiiile cerute de problem, timpul de calcul ar fi foarte mare (O(2 n )).
Vom rezolva problema n n etape. Pentru prima etap (n care lum n consideraie
numai primul numr citit) se poate forma o singur sum. La etapa i se vor calcula sumele
maxime care prin mprirea la n dau resturile (0,1,...,n-1). Dup ultima etap se tiprete
suma care prin mprirea la n d restul 0.
De fapt, n acest mod rezolvm o problem mai general i anume de a tipri
dup etapa n sumele maxime care prin mprirea la n, dau resturile (0,1,...,n-1). Nu pentru
orice numr cuprins ntre 1 i n exist o sum care mprit la n d acest rest.
Exemplu: n=2, numerele citite sunt 4 i 6 iar restul este 1.
Notm cu n1 ,..., nn cele n numere din care se formeaz sumele. Sumele maxime care
mprite la n dau resturile (0,1,...,n-1) se rein n vectorul S.
Astfel, S(0) va reine suma maxim care mprit la n d restul 0, S(1) va
reine suma maxim care mprit la n d restul 1. S(n-1) va reine suma
maxim care mprit la n va da restul n-1. Dac la un moment dat nu exist nici o
sum care mprit la n d restul i, S(i) va retine numrul 0. Rezolvm problema n n pai.
La pasul i se rein sumele maxime care se pot forma cu primele i numere. Pentru a face
distincte ntre diversele valori reinute n vectorul S vom nota S i coninutul vectorului S