Sunteți pe pagina 1din 20

Fie secventa Java

int x = 1, y, z = 3,
t;
x += y = z += t = 5;
Atunci:

x=9,y=8,z=8,t=5

Executia programului Java


class T1 {
public static void main(String[] a){
int x = 5;
int y = (x = 4)*x;
System.out.println(y);
}
}
va afisa:
20
16
5
4

Se considera operatia de impartire in virgula mobila (in limbajul Java).


Daca unul dintre operanzi este NaN atunci rezultatul este NaN
Adevarat
Fals

In Java, metoda clone() a clasei Object


creeaza un obiect nou al clasei folosind constructorul implicit
creeaza si returneaza o copie a obiectului curent
returneaza codul asociat constructorului implicit
testeaza daca obiectul specificat este o clona a obiectului curent
In Java, numarul nivelurilor de acces la membrii unei clase este
1
3
4
2

Daca doua atribute cu acelasi nume sunt mostenite de o interfata Java atunci
se obtine:
mostenire multipla
ambiguitatea atributului
clonarea structurilor de date

Numarul metodelor implementate de o interfata Java este:


0
1
oricate sunt necesare

Daca x este de tip double (in Java) atunci rezultatul x != x este true daca si
numai daca x este
+0.0
NaN
-0.0

Pentru a obtine o reprezentare a adresei interne a unei variabile obiect (in


Java) se utilizeaza
metoda getClass() din clasa Class
metoda hashCode() din clasa Object
operatorul &
metoda getName() din clasa Class

Orice obiect Java poate fi convertit la tipul String.


Adevarat
Fals

In Java este obligatorie definirea a cel putin unei clase.


Adevarat
Fals

Derivarea unei clase Java se va specifica folosind cuvantul cheie


super
extends
this

Numarul superclaselor clasei Object este:


1
infinit
0

O metoda Java definita in alt limbaj de programare este o metoda


abstracta
nativa

O metoda declarata private este accesibila subclaselor din acelasi pachet.


Adevarat
Fals

Un fir de executare Java este


o instanta a unei clase derivate din clasa Thread
o instanta a unei clase care implementeaza interfata Runnable
fie un obiect al unei clase a carei superclasa este clasa Thread, fie un obiect al unei clase
care implementeaza interfata Runnable
Un fir de executare Java poate fi pus fortat in coada de asteptare (pentru a intra in executare)
folosind metoda
start()
stop()
yield()
exit()
Metoda destroy()
elimina, din sistem, firul de executare si elibereaza toate resursele care ii fusesera alocate.
distruge firul de executare fara a face dealocarile necesare
trece firul de executare in starea blocat
Java implementeaza conceptul de grup de fire de executare utilizand
clasa ThreadGroup
clasa Thread
interfata Runnable
In Java, cuvantul cheie syncronized se refera la
sincronizarea comunicarii intre firele de executare
specificarea datelor care vor fi accesibile tuturor firelor de executare
excluderea mutuala
proprietatea de continuitate
Metoda care se suprascrie la crearea unui fir de executare Java este
start()
run()
main()
In Java, un fir de executare terminat poate fi repornit folosind start().
Adevarat
Fals
In Java, pentru crearea unui fir de executare se utilizeaza
functia fork()
operatorul new
functia init()
Un fir de executare Java trece in starea terminat atunci cand
ultima actiune a metodei run() s-a incheiat
a fost apelata metoda stop()
a fost apelata metoda sleep()
una din afirmatiile a) sau b) este adevarata
In Java nu pot fi create fire de executare de tip daemon.
Adevarat
Fals
In Java, pentru a crea un fir de executare de tip daemon, metoda setDaemon() este apelata
inaintea metodei start()
dupa metoda start()
niciodata
In amfiteatrul Studio al Universitatii Spiru Haret din Bucuresti se organizeaza un festival, iar
producatorii spectacolelor au informat managerul festivalului privind intervalul de timp [start,
final) in care fiecare spectacol se poate desfasura. Presupunem ca managerul festivalului dispune
de urmatoarele informatii:
n - numarul de spectacole propuse
start[i] - ora de la care poate incepe spectacolul i, i = 1, 2, ..., n
final[i] - ora pana la care trebuie sa se incheie spectacolul i, i = 1, 2, ..., n.
Nu exista pauza intre spectacole.

Managerul doreste o incarcare maximala a salii Studio. Presupunem ca ati scris un program C+
+/Java care sa fie util managerului in alegerea numarului maxim de spectacole, iar sala sa fie
utilizata cat mai mult timp. In testarea programului folositi urmatorul set de date
n=8
i = 1, start[1] = 2, final[1] = 5
i = 2, start[2] = 10, final[2] = 15
i = 3, start[3] = 7, final[3] = 9
i = 4, start[4] = 18, final[4] = 19
i = 5, start[5] = 10, final[5] = 12
i = 6, start[6] = 12, final[6] = 16
i = 7, start[7] = 7, final[7] = 8
i = 8, start[8] = 20, final[8] = 23
Care din urmatoarele variante de raspuns este oferit de programul dumneavoastra in ipoteza ca
acesta implementeaza corect metoda de selectie pentru utilizarea la maximum a salii pentru cat
mai multe spectacole.
1, 3, 2, 4, 8
1, 3, 7, 2, 5, 6, 8, 4
1, 7, 3, 5, 2, 6, 4, 8
1, 3, 5, 6, 4, 8

Fie n, m N*, n m si A = si B = multimi de numere intregi nenule.

Se cere determinarea unei submultimi ordonate de indici astfel incat

valoarea expresiei sa fie maxima pentru . Presupunem ca ati


scris un program C++/Java care implementeaza corect strategia de rezolvare a problemei si ca
setul de date utilizat la testarea programului este:

n = 4,
m = 6,
A = {-5, -4, -3, 10}
si
B = {-2, 1, 2, 3, 4, 5}

Care este multimea de indici obtinuta de programul testat?


{1, 4, 5, 6}
{1, 2, 5, 6}
{1, 2, 3, 6}
{1, 3, 4, 6}

Se presupune ca un numar de n melodii care au lungimile (in unitati de timp) trebuie


plasate intr-o lista care poate fi parcursa doar secvential (nu se poate asculta melodia i daca nu
au fost parcurse melodiile 1, 2, ..., i-1, i > 1). Se presupune ca probabilitatea de a asculta oricare
din melodii este 1/n.

Faceti parte din echipa care testeaza buna functionare a unui program pentru stabilirea ordinii in
care trebuie incluse melodiile in lista astfel incat timpul mediu pentru a ajunge la melodii sa fie
minim. Programul citeste n - numarul melodiilor, L[i] - lungimea melodiei i ( i = 1, 2, ..., n) si
afiseaza indicii melodiilor in ordinea in care se vor plasa in lista.

Presupunem ca setul de date folosit la testare este:


n = 10
i = 1, L[1] = 10
i = 2, L[2] = 8
i = 3, L[3] = 9
i = 4, L[4] = 7
i = 5, L[5] = 1
i = 6, L[6] = 4
i = 7, L[7] = 3
i = 8, L[8] = 5
i = 9, L[9] = 2
i = 10, L[10] =6

Programul trebuie sa afiseze:


10, 9, 8, 7, 6, 5, 4, 3, 2, 1
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1, 3, 5, 7, 9, 2, 4, 6, 8, 10
2, 4, 6, 8, 10, 1, 3, 5, 7, 9
5, 9, 7, 6, 8, 10, 4, 2, 3, 1
Un sistem de operare unitasking trebuie sa execute n programe. Timpul necesar executarii
fiecarui program este cunoscut si notat cu T[i], i = 1, 2, ..., n. Trebuie sa scrieti un planificator
de programe care citeste numarul programelor si durata acestora pentru ca apoi sa le incarce, in
memorie, pentru executare. Se presupune ca este posibil accesul direct la fisierul asociat fiecarui
program si se doreste ca timpul mediu petrecut de orice program, in memorie, sa fie minim.

Presupunem ca ati implementat strategia optima de planificare, planificatorul afiseaza corect


durata de executare a fiecaruia din programele selectate si ca setul de date pentru testarea
planificatorului este:
n=8
i = 1, T[1] = 10
i = 2, T[2] = 6
i = 3, T[3] = 8
i = 4, T[4] = 6
i = 5, T[5] = 5
i = 6, T[6] = 4
i = 7, T[7] = 9
i = 8, T[8] = 8

Lista duratelor de executare a programelor, afisata de catre planificatorul optimal, este:

10, 6, 8, 6, 5, 4, 9, 8
4, 5, 6, 6, 8, 8, 9, 10
10, 9, 8, 8, 6, 6, 5, 4
8, 9, 4, 5, 6, 8, 6, 10
In intervalul de timp [0, T] o echipa poate executa n lucrari, unde timpul de executare a fiecarei
lucrari este acelasi. La un moment dat echipa intreaga lucreaza la o singura lucrare. Se
presupune ca seful echipei cunoaste atat castigul obtinut C[i], cat si termenul de finalizare F[i],
pentru fiecare lucrare i, i = 1, 2, ..., n. Se cere o selectie optimala a lucrarilor in sensul
maximizarii castigului obtinut. Se presupune ca pentru obtinerea selectiei optimale se va utiliza
un program C++/Java care trebuie testat pentru urmatorul set de date:
n = 10
i = 1, F[1] = 1, C[1] = 10
i = 2, F[2] = 3, C[2] = 9
i = 3, F[3] = 3, C[3] = 10
i = 4, F[4] = 6, C[4] = 8
i = 5, F[5] = 7, C[5] = 8
i = 6, F[6] = 7, C[6] = 9
i = 7, F[7] = 8, C[7] = 5
i = 8, F[8] = 8, C[8] = 7
i = 9, F[9] = 8, C[9] = 10
i = 10, F[10] = 8, C[10] = 12

Indicati multimea de indici care descrie selectia obtinuta folosind strategia optimala (aplicabila
pentru orice set de date) stiind ca echipa isi incheie activitatea la momentul T = 8.
10, 3, 9, 6, 4, 5, 6, 7
3, 4, 10, 9, 8, 7, 6, 5
1, 3, 2, 4, 6, 5, 10, 9
1, 2, 3, 4, 5, 6, 7, 8
Se considera graful din figura
Multimea muchiilor arborelui partial de cost minim obtinute prin metoda Greedy, este:
[u0, u1], [u3, u4], [u1, u3], [u2, u3], [u4, u5]
[u0, u1], [u3, u4], [u1, u2], [u2, u3], [u4, u5]
[u0, u1], [u1, u2], [u2, u3], [u3, u4], [u4, u5]
[u0, u1], [u3, u4], [u1, u3], [u2, u4], [u4, u5]
Se considera un graf neorientat cu 80 de noduri si 3160 muchii. Care este numarul de muchii
care nu vor fi selectate de un program care implementeaza metoda Greedy pentru constructia
arborelui partial de cost minim?
79
3081
80
3080
Se presupune ca un program a preluat la intrare un graf cu n varfuri si m muchii pentru a obtine
un arbore partial de cost minim. Din raportul de testare intocmit asupra programului dispunem
doar de informatia privind numarul de muchii selectate de program. Acesta este 11. Care trebuie
sa fi fost n - numarul de varfuri ale grafului considerat?
n = 11
n = 12

n= (combinari de 11 luate cate 2)


n = 11! (11 factorial)
Un graf neorientat este complet daca oricare doua noduri distincte ale sale sunt adiacente.
Presupunem ca utilizati un program C++/Java care determina muchiile unui arbore partial al
grafului complet cu n varfuri. Care este numarul de muchii care nu sunt considerate de metoda
Greedy pentru a construi un arbore partial al grafului, daca n = 7?
21
7
6
15
Pentru a determina starile accesibile ale unui automat finit determinist se utilizeaza metoda
Greedy
Backtracking
Programarii Dinamice
Divide et Impera
Branch and Bound

Se considera un graf neorientat G. Pentru a determina varfurile grafului G care fac parte din
componenta conexa a varfului x (x reprezinta un parametru formal al functiei/metodei care
implementeaza algoritmul de rezolvare a problemei) se utilizeaza metoda
Backtracking
Programarii Dinamice
Divide et Impera
Branch and Bound
Greedy

Pentru a genera toate grafurile orientate, disticte, cu n varfuri, se utilizeaza metoda


Backtracking. Aveti de testat un program care trebuie sa implementeze corect metoda de
rezolvare. Cate solutii trebuie sa genereze programul pentru n = 4?
4
24
16
4096

Fie A = {1, 2, ..., n} si B = {1, 2, ..., m}, unde n si m sunt numere naturale nenule, . Se
doreste generarea tuturor functiilor injective . Ce metoda de elaborarea algoritmilor
trebuie folosita?
Metoda Branch and Bound
Metoda Divide et Impera
Metoda Backtracking
Metoda Programarii Dinamice
Metoda Greedy

Utilizand metoda backtracking se genereaza in ordine lexicografica cuvintele de cate patru


litere din multimea A = {a, b, c, d, e}, cuvinte care nu contin doua vocale alaturate. Primele opt
cuvinte generate sunt, in ordine:
abab
abac
abad
abba
abbb
abbc
abbd
abbe.
Cate cuvinte generate incep cu litera b si se termina cu litera e?
9
15
12
20

Utilizand metoda backtracking se genereaza in ordine lexicografica cuvintele de cate patru


litere din multimea A = {a, b, c, d, e}, cuvinte care nu contin doua vocale alaturate. Primele opt
cuvinte generate sunt, in ordine:
abab
abac
abad
abba
abbb
abbc
abbd
abbe.
Care este ultimul cuvant generat?
edcb
eeee
edde
eded

Utilizand metoda backtracking se genereaza in ordine lexicografica cuvintele de cate patru


litere din multimea A = {a, b, c, d, e}, cuvinte care nu contin doua vocale alaturate. Primele opt
cuvinte generate sunt, in ordine:
abab
abac
abad
abba
abbb
abbc
abbd
abbe.
Care este penultimul cuvant generat?
edec
eded
edde
edcb

Folosind modelul combinarilor se genereaza numerele naturale cu cate trei cifre distincte din
multimea {1, 2, 3, 7}, numere cu cifrele in ordine strict crescatoare, obtinandu-se, in ordine:
123, 127, 137, 237. Daca se utilizeaza exact aceeasi tehnica pentru a genera numerele naturale
cu patru cifre distincte din multimea {1, 2, 3, 4, 5, 6, 7, 8}, cate numere generate au prima cifra
2 si ultima cifra 7?
8
3
4
6

Utilizand metoda backtracking sunt generate numerele de 3 cifre avand toate cifrele distincte si
cu proprietatea ca cifrele aflate pe pozitii consecutive sunt de paritate diferita. Stiind ca primele
sase solutii generate sunt, in aceasta ordine, 103, 105, 107, 109, 123, 125, care este a zecea
solutie generata?
145
147
230
149

Utilizand metoda backtracking ati scris un program corect in C++/Java care genereaza toate
numerele de cate n cifre (0<n<10), cifrele fiind in ordine strict crescatoare. Daca n este egal cu
7, cate numere genereaza programul dumneavoastra?
9!
36
7!
7

Un program C++/Java implementeaza corect tehnica backtracking pentru a genera, in ordine


lexicografica, toate sirurile de 5 cifre 0 si 1 cu proprietatea ca nu exista mai mult de doua cifre
0 pe pozitii consecutive. Primele 7 solutii generate sunt:
00100
00101
00110
00111
01001
01010
01011.
Care este a 8-a solutie generata de acest program?
01110
01100
01011
01101

Folosind strategia backtracking ati elaborat un program C++/Java care genereaza corect, in
ordine crescatoare, toate numerele de n cifre folosind doar cifrele 3, 5 si 7. Daca pentru n = 5,
primele 5 solutii generate trebuie sa fie 33333, 33335, 33337, 33353, 33355, precizati care ar
trebui sa fie ultimele 3 solutii.
77737, 77757, 77777
77337, 77353, 77355
77773, 77775, 77777
77753, 77773, 77777

In timpul procesului de generare a permutarilor multimii {1, 2, ..., n} prin metoda


backtracking, in tabloul unidimensional x este plasat un element x[k] ( ). Acesta este
considerat valid daca este indeplinita conditia:
x[k] {x[0], x[1], ..., x[k-1]}
x[k] {x[0], x[1], ..., x[n-1]}
x[k] x[k-1]
x[k] x[k-1] si x[k] x[k+1]

Algoritmul de generare a tuturor numerelor de 5 cifre nenule, fiecare avand cifrele ordonate
strict crescator, este echivalent cu algoritmul de generare a:
submultimilor unei multimi cu 5 elemente
produsul cartezian a unor multimi de cifre
aranjamentelor de 9 elemente luate cate 5
combinarilor de 9 elemente luate cate 5

Se considera functia recursiva definita incomplet.


void s(int x){
cout << '*';
if (...) {
cout << '*';
s(x-1);
}
}

Cu ce expresie pot fi inlocuite punctele de suspensie astfel incat, in urma apelului s(2), sa afiseze
3 caractere *?
x>1
x>2
x>=3
x>0
Functia f este astfel definita incat f(1) = 8 si f(n+1)=2*f(n)-4, pentru n numar natural nenul.
Care este cea mai mare valoare pe care o poate lua x astfel incat f(x) < 1000?
7
6
8
9
Care din urmatoarele metode de sortare nu este obtinuta prin metoda Divide et impera?
Sortare prin interclasare
Sortare rapida
Sortare prin numarare
Care este complexitatea algoritmului de cautare binara (aplicat asupra unei colectii ordonate cu
n elemente), din punct de vedere al numarului de comparatii?
n

O( )
n/2
Se considera arborele binar
Se aplica metoda Divide et impera pentru traversarea in preordine a arborelui. Care este secventa
care corespunde traversarii in preordine a subarborelui drept?
+/+EF-GH
/+EF-GH
+*-AB+CD
*-AB+CD
Se considera arborele binar

Folosind strategia Divide et Impera se cauta numarul 13 in acest arbore. Care sunt numerele cu
care se va compara?
10, 11, 12, 14
10, 15, 11, 14, 12
15, 14
1, 3, 8, 10, 11, 12, 14
Se considera arborele binar

Care este ultimul numar din lista care reda parcurgerea in postordine a arborelui?
-8
17
12
Se considera imaginea partitionata recursiv in patru regiuni prin metoda Divide et impera.

Arborele asociat partitionarii este numit arbore Quad. Nodul radacina este constituit din intreaga
imagine. Care este inaltimea arborelui Quad care corespunde partitionarii date mai sus?
3
4
5
6

Presupunem ca a si b sunt numere intregi pozitive a cate n biti, unde , reprezinta


partile a cate n/2 biti:

Rezulta, de aici, ca inmultirea binara poate fi realizata prin strategia Divide et impera.
Complexitatea T(n) a algoritmului de inmultire binara este descrisa prin
T(n) = O( )
T(n) = O( )
T(n) = O(n/2)
Orice algoritm recursiv este o descriere a unui rationament de tip Divide et impera.
Adevarat
Fals
Se considera trei tije notate cu numerele 1, 2 si 3. Se considera n discuri de diametre diferite.
Initial, toate discurile sunt plasate pe tija 1 in ordinea descrescatoare a diametrelor, considerand
sensul de la baza la varf. Se doreste testarea unui program care utilizeaza strategia Divide et
impera pentru a muta discurile de pe tija 1 pe tija 2, folosind ca tija de manevra tija 3 si
respectand urmatoarele reguli:
- la fiecare pas se muta un singur disc;
- un disc poate fi asezat numai peste alt disc cu diametru mai mare sau poate fi primul disc de la
baza tijei.

Notam prin T(n) numarul mutarilor necesare. Atunci:


T(n) =
T(n) =
T(n)=
T(n)=
Se considera un triunghi de numere naturale format din n linii. Prima linie contine un numar, a
doua linie doua numere, . . . , ultima linie n numere naturale. Cu ajutorul acestui triunghi se pot
forma sume de numere naturale în felul urmator:
1) se porneste cu numarul din linia 1;
2) succesorul unui numar se afla pe linia urmatoare plasat sub el (aceeasi coloana) sau pe
diagonala la dreapta (coloana creste cu 1).

Presupunem ca ati implementat strategia programarii dinamice pentru a obtine cea mai mare
suma care se poate forma folosind regulile de mai sus.

Testati programul realizat pentru n = 4 si triunghiul de numere:


2
35
634
5614
Care este suma maxima obtinuta?

14
16
17
19
Se considera x - un vector cu n elemente numere întregi. Se scrie un program C++/Java bazat pe
strategia Programarii Dinamice care va determina un cel mai lung sir crescator al sirului x.
In timpul testarii programului se considera:
n=5
x = (4, 5, 7, -1, 7)
Programul trebuie sa afiseze:
4, 5, 7
4, 5, 7, 7
5, 7, 7
Fie G un graf orientat si ponderat avand n varfuri. Fie d[i] lungimea drumului maxim care are ca
extremitate initiala varful i (i = 1, 2, ..., n). Valoarea d(G) = max{d[i]; i = 1, 2, ..., n} reprezinta
diametrul grafului G.

Se doreste utilizarea programarii dinamice pentru elaborarea si testarea unui program C++/Java
care pentru un graf orientat G furnizeaza d(G). Care este algoritmul care, modificat, faciliteaza
obtinerea diametrului grafului G?

Dijkstra
Roy-Floyd
Kruskal
Fie matricele A[50][20], B[20][1], C[1][10] si D[10][100]. Se doreste realizarea inmultirii celor
patru matrici X = ABCD. Inmultirea matricelor este asociativa, iar numarul de inmultiri pentru
realizarea produsului Y=UV (unde U[m][n] si V[n][p]) este mxnxp. Care este ordinea de
inmultire (obtinuta prin metoda programarii dinamice) ce duce la numarul minim de inmultiri cu
care se poate calcula X.
A x ((BxC)xD)
(Ax(BxC))xD
(AxB)x(CxD)
Se defineste o partitie a unui numar natural n ca fiind o scriere a lui n sub forma
, unde , iar sunt numere naturale care verifica relatia
. Ati scris un program C++/Java, care utilizeaza metoda
programarii dinamice, pentru a numara si genera partitiile oricarui numar n introdus de la
tastatura.
Pentru n = 7 se cere sa precizati cate din partitiile generate de programul dumneavoastra sunt
constituite numai din numere impare: este impar pentru oricare i, .
7
6
5
8
Intr-o regiune montana se doreste instalarea unui lant de telecabine. Se considera ca in regiunea
montana considerata sunt N varfuri si ca statiile pentru telecabine pot fi montate in oricare din
cele N varfuri. Presupunem ca varfurile sunt date de la stanga la dreapta (exemplu: de la Vest la
Est) si ca sunt numerotate prin 1, 2, 3,..., N. Astfel, fiecare varf i este precizat prin coordonata
X[i] (pe axa OX) si inaltimea H[i] (pe axa OY). Se doreste infiintarea a exact K statii de
telecabine. Deoarece se doreste ca lantul de telecabine sa asigure conectarea varfurilor 1 si N, cu
exceptia statiei 1 (amplasata obligatoriu in varful 1) care este conectata doar cu statia 2 si a
statiei K (amplasata obligatoriu in varful N) care este conectata doar cu statia K-1, toate celelalte
statii i (1 < i < K) sunt conectate atat cu statia i-1 cat si cu statia i+1, iar lungimea totala a
cablurilor folosite la conectare sa fie minima. Lungimea cablului dintre doua statii este egal cu
distanta dintre ele. In plus, un cablu care uneste doua statii consecutive nu poate avea o lungime
mai mare decat o lungime fixata L. De asemenea, formele de relief influenteaza conectare. Mai
precis: varfurile i si j (i < j) nu pot fi conectate direct daca exista un varf v (i<v<j) astfel incat
segmentul de dreapta care uneste varfurile i si j trece pe sub varful v. Daca i, v si j sunt coliniare
atunci toate trei se considera a fi statii.
Pentru a identifica amplasarea celor K statii astfel incat lungimea totala a cablurilor sa fie
minima si sa fie indeplinite restrictiile de mai sus ati elaborat un program C++/Java care
implementeaza un algoritm obtinut prin tehnica programarii dinamice. Programul afiseaza
lungimea minima LM si lista varfurilor in care se instaleaza statiile.

Pentru N = 7, K=5, L = 11 si amplasarea

X[i] H[i]
0 16
4 3
6 8
7 4
12 16
13 16
14 16

se cere sa verificati care dintre urmatoarele raspunsuri ale programului trebuie sa fie cel corect.
LM = 16, Statiile: 1, 5, 6, 7
LM = 22, Statiile: 1, 3, 5, 6, 7
O companie este alcatuita din N soldati. Se considera ca soldatii sunt identificati prin numerele
1, 2, ..., N si se cunosc inaltimile H[i], pentru fiecare soldat avand codul i (i = 1, 2, ..., N).
La prima inspectie soldatii sunt asezati in sir in ordinea crescatoare a codului. Capitanul doreste
ca din sir sa iasa un numar minim de soldati, iar cei care raman, fara sa-si schimbe locurile, sa
poata vedea cel putin o extremitate a sirului (din stanga sau din dreapta). Un soldat vede o
extremitate daca intre el si extremitate nu se afla un soldat cu inaltimea mai mare sau egala cu
inaltimea lui.
Ati scris un program C++/Java care accepta la intrare numarul N si inaltimile H[i], i=1, 2, ...,N si
determina, folosind strategia programarii dinamice, numarul minim de soldati x care trebuie sa
paraseasca sirul pentru a fi indeplinita conditia din enunt.

La testarea programului, dumneavoastra considerati urmatoarele date:


N=8
i = 1, H[1] = 1.86
i = 2, H[2] = 1.86
i = 3, H[3] = 1.31
i = 4, H[4] = 2.00
i = 5, H[5] = 1.40
i = 6, H[6] = 1.00
i = 7, H[7] = 1.97
i = 8, H[8] = 2.20

Ce valoare a lui x trebuie sa afiseze programul?


3
4
2
1
Se considera o matrice dreptunghiulara cu m linii si n coloane ce contine numere naturale in
intervalul [1,255]. Se doreste traversarea matricei din coltul stanga-sus in coltul dreapta-jos. O
traversare este compusa din deplasari. La o deplasare de executa un salt pe orizontala (se poate
ajunge in oricare celula de pe aceeasi linie, dar nu in acelasi loc) si un pas pe verticala (la celula
aflata dedesubt). Exceptia face ultima deplasare constituita doar din saltul de pe ultima linie in
coltul dreapta-jos. Rezulta ca in cadrul traversarii se viziteaza 2m celule.
Se doreste suma minima care se poate obtine prin astfel de traversari. Pentru aceasta ati elaborat
un program C++/Java care foloseste tehnica programarii dinamice pentru a determina suma
minima.
Vi se cere sa considerati, in vederea testarii programului, setul de date:
Dimensiunea matricei:
m = 4, n = 5
Matricea:
3 4 5 7 9
6 6 3 4 4
6 3 3 9 6
6 5 3 8 2
si sa validati raspunsul corect (care reprezinta suma minima ce poate fi obtinuta printr-o
traversare salt-pas).

25
28
24
22

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