Sunteți pe pagina 1din 5

TEHNICI AVANSATE DE PROGRAMARE

Fiecare student trebuie să-și aleagă din lista de mai jos exact două
probleme care se rezolvă folosind tehnici de programare diferite!

Grupele 201 și 202 vor prezenta aceste proiecte în penultimul laborator,


iar grupele 203 și 204 le vor prezenta în ultimul laborator.

Nepromovarea testului de laborator implică nepromovarea examenului!

A. Metoda GREEDY

1. Fie numărul real r, numărul natural nenul n şi n+1 numere reale a0,a1,…,an.
Ştiind că cele n+1 numere reale reprezintă coeficienţii unui polinom f de grad n,
să se determine o permutare a lor astfel încât valoarea polinomului f(x) să fie
maximă.

2. Considerăm n şiruri de caractere, formate din maxim 255 de caractere fiecare. Să


se determine cea mai lungă secvență comună a şirurilor respective.

3. Fie n bile numerotate de la 1 la n (n<=100). Pe o bucată de lemn se găsesc n+1


găuri în care se aşează cele n bile, deci o gaură va fi mereu liberă (indicată prin
0). Ştiind că la un moment dat se poate muta doar o singură bilă din gaura sa în
gaura liberă, să se determine o succesiune de mutări prin care să se ajungă de
la o configuraţie iniţială la o configuraţie finală astfel încât numărul de mutări
efectuate trebuie să fie minim.

4. Fie mulţimile A={a1,a2,…,an} şi B={b1,b2,…,bm}, unde m≥n. Să se determine o


submulţime cu n elemente C a mulţimii B astfel încât valoarea sumei
n
S   a k * ck să fie maximă, știind că elementele mulțimii A pot fi permutate.
k 1

5. Fie mulţimile A={a1,a2,…,an} şi B={b1, b2,…,bn}. Să se determine o permutare a


elementelor mulţimii A şi respectiv o permutare a elementelor mulţimii B astfel
n
încât valoarea sumei S   (a k  bk ) 2 să fie maximă.
k 1

6. Într-o o facultate, fiecărui student dintr-o serie îi sunt repartizate în cadrul primei
teme de laborator la Tehnici de programare câte 3 probleme dintr-o listă dată.
Cunoscând timpii de evaluare ai fiecărei probleme dintre cele n din listă, precum
si distribuția problemelor pe fiecare student în parte, ajutați profesorii evaluatori
să stabilească ordinea de evaluare a temelor astfel încât să se minimizeze timpul
mediu de aşteptare a notelor.

7. Se considera n (n<=100) intervale reprezentând perioadele în care au trăit n


scriitori. Să se realizeze un program care determină cea mai scurtă perioadă în
care se aflau în viață un număr maxim de scriitori.
8. Într-un hotel cu k (k<=100) camere s-au primit pentru anul următor n
(n<=1000) solicitări de cazare, fiecare pentru m (m<=100) zile. Pentru fiecare
cerere se cunoaște ziua de început a perioadei de cazare. Știind ca anul următor
are 365 de zile, să se realizeze un program care determina numărul maxim de
cereri ce pot fi onorate.

9. Într-un laborator de analize chimice se utilizează N reactivi. Se ştie că, pentru a


evita accidentele sau deprecierea reactivilor, aceştia trebuie să fie stocați în
condiții de mediu speciale. Mai exact, pentru fiecare reactiv x, se precizează
intervalul de temperatură [min_x , max_x] în care trebuie să se încadreze
temperatura de stocare a acestuia într-un frigider. Orice frigider are un dispozitiv
cu ajutorul căruia putem stabili temperatura (constantă) care va fi in interiorul
acelui frigider (exprimată într-un număr întreg de grade Celsius). Scrieți un
program care să determine numărul minim de frigidere necesare pentru stocarea
reactivilor chimici.

10. Se consideră o listă formată din n proiecte pe care trebuie să le execute o echipă
de programatori din Departamentul Dev. Pentru fiecare proiect se cunoaște
termenul său limită, precum și bonusul pe care îl va obține echipa dacă proiectul
este finalizat la timp (în caz contrar, bonusul va fi 0). Durata de executare a
oricărui proiect se consideră egală cu o zi. Ajutați-vă echipa scriind un program
care să determine o modalitate de planificare a executării proiectelor astfel încât
bonusul obținut să fie maxim!

B. Metoda BACKTRACKING

1. Fie s o permutare de ordin n. O valoare k (1<=k<=n) se numeşte punct fix al


permutării s dacă s(k)=k. Să se genereze toate permutările de ordin n care au
exact p puncte fixe (1<=p<=n).

2. La un dineu sunt invitate n familii formate din soţ şi soţie. Să se afişeze toate
modalităţile distincte de aşezare a celor 2n invitaţi în jurul unei mese rotunde
astfel încât orice bărbat să fie încadrat de două femei şi orice femeie să fie
încadrată de doi bărbaţi şi, în plus, să nu existe doi soţi aşezaţi unul lângă
celălalt.

3. După o noapte de chef Cetăţeanul Turmentat se află în faţa unei mari probleme:
trebuie să urce cele n trepte până la uşa casei sale. Din cauza stării de ebrietate
avansate Cetăţeanul Turmentat nu poate să urce decât fie o treaptă, fie două.
Ajutaţi-l, indicându-i toate modurile în care el poate să urce cele n trepte,
precum şi câte moduri are în total la dispoziţie.

4. Se citeşte un tablou format din n numere întregi. Să se afişeze toate subşirurile


sale strict crescătoare de lungime maximă.

5. Se citeşte un număr natural n. Să se afişeze toate numerele naturale formate din


cifre distincte nenule care sunt mai mici decât n şi au aceeaşi suma a cifrelor ca
şi numărul n.
6. Se citeşte un număr natural p. Să se afişeze toate numerele naturale formate din
p cifre nenule care au proprietatea că adunate cu inversul lor dau un pătrat
perfect.

7. La un concurs sportiv s-au înscris n concurenţi având numerele de concurs


1,2,...,n. Pentru fiecare sportiv se cunoaşte tara de origine (şir de caractere). In
prima zi vor intra in concurs m concurenţi. Afişaţi toate posibilităţile de a stabili
ordinea intrării in concurs a celor m concurenţi respectând următoarele condiţii:
 2 sportivi din aceeaşi tara nu pot evolua unul după altul
 trebuie respectata ordinea crescătoare a numerelor de concurs ale sportivilor.

8. La un festival de muzica s-au înscris n melodii codificate 1,2,3,...,n (n>=4). Sa se


afişeze toate posibilităţile de a stabili ordinea intrării in concurs a melodiilor ştiind
ca melodiile cu codurile C1 si C2 trebuie obligatoriu sa evolueze a doua respectiv
penultima. Valorile lui C1 si C2 se citesc de la tastatura C1,C2 aparţin {1,2,...,n}.

9. Un comis-voiajor trebuie sa viziteze un număr n de orașe. Iniţial, acesta se află


într-unul dintre ele, notat 1. Comis-voiajorul doreşte să nu treacă de două ori
prin acelaşi oraş, iar la întoarcere sa revină in oraşul 1. Cunoscând legăturile
existente între orașe, se cere sa se tipărească toate drumurile posibile pe care le
poate efectua comis-voiajorul.

10. Scrieţi un program care, folosind metoda backtracking, afişează toate modurile
de a aranja elementele unui şir dat de numere întregi astfel încât in şirul rezultat
sa nu existe doua elemente negative alăturate.

C. Metoda PROGRAMĂRII DINAMICE

1. Se dau n șiruri de caractere. Să se găsească în mod eficient subsecvența comună


maximală a celor n șiruri.

2. Considerând date n tipuri de monede și o sumă S, scrieți un program care să


determine o modalitate de plată a sumei S cu un număr de minim de monezi.

3. Sa se determine cel mai lung subșir al unui sir format din n numere naturale
nenule cu proprietatea că orice număr din subșir, mai puțin primul, se divide cu
predecesorul său.

4. O secvență este palindromică dacă este aceeași prin citirea de la stânga la


dreapta și de la dreapta la stânga. Scrieți un program care sa se afișeze cea mai
lunga subsecvență palindromică dintr-un șir de caractere dat.

5. Primăria municipiului București a hotărât să scoată la licitație câte un chioșc în


fiecare dintre cele n stații de pe traseul autobuzului 2018. În acest scop, Primăria
a efectuat un studiu de fezabilitate cu ajutorul căruia a fost estimat profitul lunar,
în RON, care poate fi obținut de către fiecare chioșc. În unele stații, aflate în
zone mai puțin circulate, s-a constatat că este posibil să nu se obțină nici un
profit, ci chiar să se înregistreze pierderi (adică profitul sa fie negativ!). Pentru a
putea totuși să vândă toate chioșcurile, Primăria a hotărât ca fiecare investitor
interesat să fie obligat să cumpere chioșcurile aflate în cel puțin k stații
consecutive. Sarcina voastră este să determinați secvența de chioșcuri pentru
care trebuie să liciteze un investitor astfel încât profitul estimat să fie maxim.
Deoarece orice investitor dorește să păstreze relații cordiale cu Primăria, în cazul
în care nu există nici o secvență de chioșcuri care să aducă profit el va licita
pentru o secvență de chioșcuri pentru care pierderile sunt minime. Fiind date
numerele naturale n și k, să se determine profitul maxim care poate fi obținut
pentru o secvență formată din cel puțin k chioșcuri dintre cele n, precum și
numerele de ordine ale primului, respectiv ultimului chioșc din secvența pentru
care se obține profit maxim. Chioșcurile se considera numerotate de la 1 la n.

6. Vitrina frigorifică a celebrei firme Cheese Inc. este formată din n rafturi
(1≤n≤100), fiecare raft fiind împărţit la rândul său tot în câte n compartimente,
fiecare compartiment putând să conţină cel mult 300 grame de brânză. Rafturile
sunt numerotate de la 1 la n de jos în sus, iar pe un raft compartimentele sunt
numerotate, de la stânga spre dreapta, tot cu numerele de la 1 la n. Pentru a
permite o bună aerisire a brânzeturilor, fiecare compartiment al vitrinei (mai
puţin cele aflate pe marginile laterale) este prevăzut cu câte 6 găuri de aerisire
(3 pe latura superioară şi 3 pe latura inferioară), aşa cum se poate observa din
figura alăturată. Condiţiile climaterice deosebite de lângă vitrina frigorifică (mai
ales aroma deosebită a curenţilor de aer) l-au determinat pe şoricelul Mickey să-
şi stabilească domiciliul, de ani buni, în imediata vecinătate a vitrinei. Zi de zi însă
şoricelul Mickey este obsedat de o singură idee: "Cum ar trebui să procedez
astfel încât să pot fura cât mai multă brânză din vitrină, fără să fiu prins de
vecinul meu, sângerosul motan Kat?". Din păcate (sau din fericire) alogritmii nu
sunt un fel de brânză, deci şoricelul Mickey nu a reuşit să găsească singur
rezolvarea problemei care-l frământă aşa de tare. Tot ceea ce a reuşit el au fost
următoarele observaţii, esenţiale de altfel:

 singurul raft pe care mă pot sui de pe podea este raftul 1 (cel de jos), restul
fiind prea sus;
 ca să mă pot deplasa mai repede trebuie să nu pierd vremea rozând pereţii
dintre compartimente, ci voi trece dintr-un compartiment în altul printr-o
gaură de aerisire;
 deoarece motanul, dacă se prinde că fur din vitrină, mă caută plimbându-se
de-a lungul rafturilor trebuie ca dintr-un compartiment să trec neapărat într-
un compartiment aflat pe un raft imediat mai sus, ca să îmi piardă momentan
urma;
 când am ajuns sus, pe vitrină, pot să stau liniştit şi să mănânc toată brânza
adunată!

Scrieţi un program care să găsească un traseu pe care să-l urmeze Mickey astfel
încât cantitatea de brânză adunată să fie maximă şi, evident, să respecte toate
observaţiile făcute de el!

7. Nea Gogu este patronul unui nou depozit en-gros de sârmă. Iniţial, în depozit se
găseşte o singură bucată de sârmă având o lungime de x metri şi o maşină de
tăiat sârma. După un timp, nea Gogu primeşte n comenzi, în fiecare comandă
fiind cerută câte o bucată de sârmă de o anumită lungime. Dornic de îmbogăţire,
nea Gogu vrea să onoreze un număr maxim de comenzi m, fără a irosi însă
sârma atunci când o taie în bucăţi. Pentru aceasta, el se gândeşte să procedeze
astfel: alege mai întâi o anumită comandă în care se cere o bucată de sârmă de
lungime x1 astfel încât să poată tăia toată bucata de sârmă de lungime x într-un
număr întreg n1 de bucăți de lungime x1 (pentru a nu pierde nici o bucăţică de
sârmă), taie bucata respectivă de sârmă în mod corespunzător şi apoi onorează
comanda. În continuare nea Gogu procedează în mod similar, adică alege o altă
comandă în care se cere o bucată de sârmă de lungime x2 astfel încât să poată
tăia fiecare din cele n1-1 bucăţi de sârmă de lungime x1 rămase într-un număr
întreg n2 de bucăţi de lungime x2, taie cele n1-1 bucăţi rămase în mod
corespunzător şi onorează şi această comandă…şi tot aşa până când nu mai
poate onora astfel nici o comandă din cele rămase. Mai mult, nea Gogu îşi dă
seama că poate economisi şi energia electrică consumată de maşina de tăiat
dacă alege cele m comenzi astfel încât numărul total de bucăţi de sârmă tăiate t
să fie minim.

Scrieţi un program care să determine atât numărul maxim de comenzi m pe care


le poate onora nea Gogu, cât şi numărul total de bucăţi de sârmă tăiate t.

8. Se consideră o listă formată din n proiecte pe care trebuie să le execute într-o


anumită lună o echipă de programatori din Departamentul Dev. Pentru fiecare
proiect, managerul a stabilit intervalul în care acesta trebuie executat (ziua
inițială și ziua finală), precum și bonusul pe care îl obține echipa dacă proiectul
este finalizat la timp (în caz contrar, bonusul va fi 0). Ajutați-vă echipa scriind un
program care să determine o modalitate de planificare a executării proiectelor
astfel încât bonusul obținut să fie maxim!

9. Se consideră un rucsac având capacitatea G și n obiecte pentru care se cunosc


greutățile și câștigurile asociate. Știind că orice obiect fie este încărcat complet în
rucsac, fie nu este încărcat deloc, să se determine o modalitatea de încărcare a
rucsacului astfel încât câștigul obținut să fie maxim.

10. Considerăm o bară metalica cu lungimea de n metri, din care se pot tăia bucăţi
de lungime 1,2,…,n metri. Cunoscând preţurile de vânzare ale bucăților de
1,2,…,n metri, găsiţi o modalitate de tăiere a barei astfel încât câştigul obţinut să
fie maxim.

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