0% au considerat acest document util (0 voturi)
72 vizualizări5 pagini

Programare Dinamica

Documentul prezintă trei tehnici de programare dinamică: metoda înainte, metoda înapoi și metoda mixtă. De asemenea, oferă ca exemplu generarea seriei Fibonacci folosind programarea dinamică.

Încărcat de

Dankmeister
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
72 vizualizări5 pagini

Programare Dinamica

Documentul prezintă trei tehnici de programare dinamică: metoda înainte, metoda înapoi și metoda mixtă. De asemenea, oferă ca exemplu generarea seriei Fibonacci folosind programarea dinamică.

Încărcat de

Dankmeister
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 5

Programare dinamica

Rezolvarea oricarei aplicatii utilizand aceasta tehnica de programare se


bazeaza pe identificarea solutiei optime. Optimul general este obtinut pas cu pas
din asa-numitele optime partiale. Majoritatea aplicatiilor rezolvabile cu ajutorul
tehnicii programarii dinamice se bazeaza pe identificarea si implementarea uneia
sau mai multor formule matematice.
In general, datele de intrare sunt retinute intr-o structura liniara pentru
memorarea informatiilor.
Exista 3 clase de probleme:
 metoda “inainte”
 metoda “inapoi”
 metoda “mixta”
Cel mai simplu exemplu de problema rezolvabila folosind programarea
dinamica este generarea sirului Fibonacci.
1. Identificarea si afisarea celui mai lung subsir strict crescator.

#include <fstream>
using namespace std;
ifstream cin("sclm2.in");
ofstream cout("sclm2.out");
long long a[100001], b[100001],n,max,maxs;
void cmp(int x)
{
int max=0;
for(int i=x+1;i<=n;i++)
{
if (a[x]<a[i])
if (b[i]>max)
{
max=b[i];
b[x]=max+1;
}
}
if (b[x]==0)
b[x]++;
if(b[x]>maxs)
maxs=b[x];
}

int main()
{
cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i];
b[n]=1;
for (int i=n-1;i>0;i--)
cmp(i);
cout<<maxs;
}

2. Identificati si afisati suma maxima si traseul prin care obtinem aceasta


suma maxima, stiind ca putem lua de pe fiecare linie in considerare o
singura valoare, deplasarea in matrice de pe linia K pe linia K+1
realizandu-se obligatoriu numai in directia sud sau directia sud-est.

3. Triunghiul lui Pascal


#include <iostream>
using namespace std;
int main ()
{
int n=7;
int a[20], b[20];
a[1]=1;
cout<<a[1];
for(int i=2;i<=n;i++)
{
if(i%2==0)
{
int x=2;
b[1]=1;
for(int j=1;j<i;i++)
{
b[x]=a[j]+a[j+1];
x++;
}
b[i]=1;
for(int k=1;k<=i;k++)
cout<<b[k]<<" ";
cout<<endl;
}
else
{
int x=2;
a[1]=1;
for(int j=1;j<i;i++)
{
a[x]=b[j]+b[j+1];
x++;
}
a[i]=1;
for(int k=1;k<=i;k++)
cout<<a[k]<<" ";
cout<<endl;
}
}

S-ar putea să vă placă și