Documente Academic
Documente Profesional
Documente Cultură
LIVIA MĂRNUNŢELU
Anul şcolar 2011-2012 Clasa a XI-a
DISCIPLINA INFORMATICA 17.03.18
Metoda programarii dinamice se poate folosi pentru problemele in care trebuie sa fie
gasita solutia optima si care au urmatoarele caracteristici :
1. Solutia optima se poate alege dintr-o multme de solitii, fiecarei solutii putand sa i
se asocieze o valoare. Alegerea solutiei optime inseamna alegerea solutiei care
are valoarea optima ( minima sau maxima )
EXEMPLE DE PROBLEME
OBSERVATII
- Multimea datelor de intrare o reprezinta multimea A formata din elementele aij ale
triunghiului
- Valoarea solutiei optime este valoarea maxima ( suma elementelor trebuie sa fie
maxima)
EXEMPLU
Matricea triunghiului –a
Suma maxima =20
5 0 0 0
4 2 0 0
5 4 3 0
4 6 2 5
20 0 0 0
15 1 0 0
11 10 8 0
4 6 2 5
1 0 0 0
1 1 0 0
2 1 2 0
0 0 0 0
LICEUL TEORETIC ION BARBU Prof. LIVIA MĂRNUNŢELU
Anul şcolar 2011-2012 Clasa a XI-a
DISCIPLINA INFORMATICA 17.03.18
OBSERVATII
- Valoarea solutiei optime este valoarea maxima (lungimea subsirului trebuie sa fie
maxima)
indici 1 2 3 4 5 6
a 1 -2 3 2 4 4
L 4 4 3 3 2 1
p 3 3 5 5 6 6
subsirul 1 3 4 4
OBSERVATII
1. Pentru numarul de bucati de teava se foloseste variabila n, pentru lungimea tevii care
trebuie confectionata, variabila L, iar pentru lungimea maxima a unei tevi care se poate
forma adaugand o noua bucata de teava la tevile construite anterior- variabila max.
Variabila max are initial valoarea 0, iar la sfarsit, daca problema are solutie, are lungimea
L( lungimea tevii cate trebuie construita )
2. Pentru memorarea lungimii fiecatei bucati de teava se foloseste matricea a
3. Pentru memorarea tevilor care se p[ot confectiona se foloseste vectorul T de lungime L
L=10
n=5
1 2 3 4 5
2 2 3 5 6
a
Vectorul T
max a(i) 0 1 2 3 4 5 6 7 8 9 10
initial -1 0 0 0 0 0 0 0 0 0 0
0 a(1) -1 0 2 0 0 0 0 0 0 0 0
2 a(2) -1 0 2 0 2 0 0 0 0 0 0
4 a(3) -1 0 2 3 2 3 0 3 0 0 0
7 a(4) -1 0 2 3 2 5 0 5 5 5 5
10 a(5) -1 0 2 3 2 5 6 5 6 6 6
void p_dinamica()
{int i,j,k ;
for(i=1; i<=n; i++)
{for(j=max; j>=0; j--)
if(T[j]!=0 && j+a[i]<=L)
T[j+a[i]]=a[i];
if(max+a[i]<=L) max=max+a[i];
int solutie()
{return T[L]1=0;}
void afiseaza()
{if(! Solutie()) cout<<” Teava nu se poate confectiona”;
else
for(i=L; i!=0; )
{ cout<< “ bucata de “<< T[i]<<” metri “<<endl;
LICEUL TEORETIC ION BARBU Prof. LIVIA MĂRNUNŢELU
Anul şcolar 2011-2012 Clasa a XI-a
DISCIPLINA INFORMATICA 17.03.18
i-=T[i] ;}}