Sunteți pe pagina 1din 11

Musteata Sebastian Cls a-XI-a B

Enuntul problemei

Se considera un triunghi de numere naturale format din n lini Prima linie contine 1 numar, a doua line contine 3 numere si ultima linie contine n numere.Cu ajutorul acestiu triunghi se pot forma sume de numee naturale in felul urmator.

Se porneste cu numarul din linia 1 succesorul unui numar se afla pe linia urmatoare plasat sub el sau pe diagonala la dreapta Care este cea mai mare suma care poate forma astfel si care sunt numerele care il alcatuiesc?

Exemplu
Pentru n=4 avem 4 lini S= 2+3+6+5 S= 2+3+6+6

2 35 634 5614

Algoritmul de rezolvare

Problema se rezolva cu ajutorul metodei Programari Dinamici Pentru etapa I se trateaza linia i a triunghiului Fie un sir de n numere care respecta conditiile problemei si care formeaza suma maxima, de aici consideram numarul care o fost preluat de pe linia i. Vom forma un triunghi de la baza la varf cu sumele maxime care se pot forma cu fiecare numar Intr-o matrice t citim triunghiul de numere si intr-o alta matrice c vom avea relatiile urmatoare

C[n,1]:=T[n,1]; C[n,2]:=T[n,2]; . . C[n,n]:=T[n,n];

2 35 634 5614 T[1,1]=2;T[3,3]=4 T[2,1]=3;T[4,1]=5 T[2,2]=5;T[4,2]=6 T[3,1]=6;T[4,3]=1 T[3,2]=3;T[4,4]=4

Pentru linia i pentru i<n se obtine astfel C[i,j]=max{T[i,j]+C[i+1,j],T[i,j]+ +C[i+1,j+1]} i:=1,n-1; j:=1,i

2 35 634 5614 Linia 4: 5 6 1 4 Linia 3: C[3,1]={6+5,6+6}= C[3,2]={3+6,3+1}= C[3,3]={4+1,4+4}=

12

9
8

Matricea C : 12 9 8 5 6 1 4 Linia 2: C[2,1]=max{3+12,3+9}= C[2,2]=max{5+9,5+8}=

12 5

9 6

8 1

15 14

Matricea C: 15 14 12 9 8 5 6 1 4

15 14 12 9 5 6

8 1

Linia 1: C[1,1]=max{2+15,2+14}= 17 Suma maxima este 17

Programul
program triunghiuri; type matrice=array[1..10,1..10]of integer; var t,c,drum:matrice; i,j:integer; Begin write(n=);readln(n); for i:=1 to n do for j:=1 to I do begin write(t[,i,,,j,]=);readln(t[i,j]);end; for j:=1 to n do c[n,j]:=t[n,j]; for i:=1 to n-1 to 1 do begin for j:=1 to I do if c[i+1,j]<c[i+1,j+1] then begin

c[i,j]:=t[i,j]+c[i+1,j+1]; drum[i,j]:=j+1;end else begin c[i,j]:=t[i,j]+c[i+1,j]; drum[i,j]:=j;end;end; writeln(suma maxima este,c[1,1]); i:=1;j:=1; while i<=n do begin writeln(t[i,j]); j:=drum[i,j]; i:=i+1;end; readln; End.

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