1- Scrieți un program în care să se efectueze principalele operații cu o listă simplu înlănțuită (inserare, căutare, ștergere) alocarea elementelor făcându-se printr-un alocator propriu de memorie.

1- Se consideră o masă circulară la care sunt așezați copii și fie n un număr întreg pozitiv. Pornind de la un anumit copil ei încep să numere pe rând. Atunci când unul din copii ajunge numărul n acesta se ridică de la masă și se reia numărătoarea pornind de la 1. Jocul se oprește atunci când râmâne un singur copil.

Realizați un program ce utilizează o listă circulară pentru a afișa ordinea în care copiii se ridică de la masă.

1- Să scrie un program care să calculeze produsul a două polinoame utilizându-se pentru reprezentarea unui polinom o listă simplu înlănțuită.

1- Se citesc de la tastatura mai multe cuvinte. Să se determine frecvența de apariție a cuvintelor în textul respectiv utilizându-se o tabelă de dispersie.

1- Să se implementeze o listă dublu înlănțuită ale cărei elemente să fie studenții unei facultăți.

Programul va conține funcții pentru:

1- Într-o localitate de frontieră se găsesc un număr n de puncte vamale. Fiecare mașină ce dorește să treacă granița trebuie să treacă printr-un astfel de punct. Traficul fiind foarte intens, la fiecare dintre puncte se formează câte o coadă. O mașină ce vine se așează la una dintre acestea (la cea mai mică).

Să se se realizeze un program care va simula traficul în vamă.

1- Să se realizeze un program care calculează forma poloneză a unei expresii aritmetice.

 

 

2. Grafuri

2- Să se scrie un program pentru parcurgerea DFS (Depth First Search) a unui graf conex neorientat.

Exemplu:

Pentru graful

parcurgerea DFS va afișa vârfurile în ordinea: 1, 2, 5, 3, 7, 6, 4, 8.

 

2- Să se scrie un program pentru parcurgerea BFS (Breadth First Search) a unui graf conex neorientat.

Exemplu:

Pentru graful anterior parcurgerea BFS este: 1, 2, 3, 4, 5, 6, 7, 8.

2- Să se scrie un program pentru parcurgerea D a unui graf conex neorientat.

Pentru graful anterior ordinea de vizitare a nodurilor este: 1, 2, 3, 4, 6, 7, 8, 5.

2- Scrieți un program care testează dacă un graf neorientat este conex.

2- Scrieți un program care pentru un graf neorientat determină toate componentele conexe.

2- Fie un graf neorientat G=(V, E). Scrieți un program care să verifice dacă graful dat este aciclic.

2- Un graf neorientat G=(V, E) este eulerian dacă și numai dacă este conex și gradul fiecărui vârf este par. Scrieți un program care pentru un graf dat verifică dacă este eulerian, iar în caz de răspuns afirmativ determină un ciclu eulerian.

2- Fie un graf neorientat G=(V, E). Realizați un program care să determine toate ciclurile hamiltoniene ale lui G.

2- Fie un graf neorientat G=(V, E). Se definește distanța dintre două noduri u și v ca fiind numărul de muchii de pe drumul cel mai scurt ce unește pe u cu v. Scrieți un program care să determine distanța minimă între două noduri specificate.

2- Fie un graf neorientat G=(V, E). Se definește muchie critică acea muchie care prin eliminarea ei conduce la mărirea numărului de componente conexe ale grafului. Scrieți un program care să determine toate muchiile critice ale unui graf dat.

2- Fie G=(V, E) un graf orientat unde V={1, 2,..., n} este mulțimea nodurilor și E este mulțimea arcelor (). Pentru reprezentarea grafului se utilizează matricea costurilor C:

Fie i0 un vârf al grafului. Să se determine pentru toate vârfurile , dacă există, un drum de cost minim de la i0 la j.

2- (Arborele partial de cost minim) Fie G=(V, E) un graf neorientat unde V={1, 2,..., n} este mulțimea nodurilor și E este mulțimea muchiilor (). Pentru reprezentarea grafului se utilizează matricea costurilor C:

Să se determine un graf parțial G1=(V, E1) cu proprietatea că suma costurilor tuturor muchiilor este minimă. Graful parțial de cost minim este chiar un arbore.

 

2- Fie G=(V, E) un graf orientat unde V={1, 2,..., n} este mulțimea nodurilor și E este mulțimea arcelor (). Graful orientat G se numește tare conex dacă pentru orice pereche de vârfuri , există un drum de la u la v și un drum de la de la v la u.

Se poate arăta că relația de tare conexitate este o relație de echivalență. În cazul în care un graf orientat nu este puternic conex atunci el se poate descompune în mai multe componente puternic conexe. O astfel de componentă este determinată de un subgraf al grafului inițial.

2- Se consideră procesul de proiectare a unei plăci electronice cu N componente electronice (1<=N<=100). Pentru fiecare componentă I se cunoaște numărul de interconexiuni. Se consideră graful determinat de mulțimea pinilor și mulțimea interconectărilor posibile ale tuturor componentelor, precum și lungimile lor. Dintre toate modalitățile de interconectare posibile se cere cea corespunzătoare arborelui de acoperire minimă.

Intrarea se compune din mai multe plăci electronice. Descrierea unei plăci conține pe prima linie numărul N de componente și numărul M de interconexiuni. Dacă N=0 atunci procesul de introducere date se încheie. O interconexiune se caracterizează prin trei valori: două vârfuri v1 și v2 precum și lungimea acesteia l.

Ieșirea programului va consta dintr-o linie de text pentru fiecare set de date de test. Ea va conține numărul testului (se începe numerotarea cu 1), precum și costul interconectării de lungime minimă.

Exemplu

Intrare

5 7

1 2 40 2 3 35 1 5 27 1 4 37 4 5 30 2 4 58 3 4 60

0 0

Iesire

Cazul 1: [1 5] [4 5] [2 3] [1 2]

Interconectarea de cost minim are valoarea 132

 

 

 

 

 

 

 

 

2- Pentru asigurarea securității activității dintr-un combinat chimic s-a apelat la o companie de pompieri. Instalarea companiei presupune stabilirea locurilor de instalare a comandamentului și a posturilor de supraveghere. Pentru aceasta sunt disponibile în cadrul combinatului n puncte de control. Pentru fiecare pereche de puncte de control se cunoaște dacă există o legătură directă între ele și în caz afirmativ distanța dintre ele. Se cunoaște de asemenea că între oricare două puncte de control există un drum direct sau indirect. Odată stabilite amplasamentele comandamentului și a punctelor de supraveghere în câte unul dintre cele n puncte de control este posibil să se ajungă de la comandament la fiecare punct de supraveghere parcurgând un anumit drum. Evident, este de dorit ca lungimea acestui drum să fie minimă și maximul dintre lungimile drumurilor minime pentru fiecare punct de supraveghere în parte să fie cât mai mic posibil. Se cere determinarea punctului de control în care trebuie instalat comandamentul cât și drumurile care vor fi parcurse de la comandament la fiecare punct de supraveghere astfel încât aceste drumuri să aibă lungimi minime și cel mai lung dintre ele să fie cât mai scurt posibil.

Intrarea constă din mai multe date de test. Descrierea unei zone începe pe prima linie cu două numere naturale n și m corespunzând numărului de puncte de control (1<=n<=100) respectiv numărului de perechi de puncte de control ce sunt direct conectate (1<=m<=10000). În continuare se citesc m perechi de puncte de control. Intrarea se termină atunci când n=0.

Ieșirea programului va consta dintr-o linie de text pentru fiecare set de date. Ea va conține numărul testului (se începe numerotarea cu 1), precum și numărul punctului de control unde se va instala comandamentul.

Exemplu :

Intrare

9 14

1 2 4 1 8 8 2 3 8 2 8 11 3 4 7 3 6 4 3 9 2

4 5 9 4 6 14 5 6 10 6 7 2 7 8 1 7 9 6 8 9 7

Iesire

Cazul 1: Comandamentul in 3

Drumul pina la 1: 3 6 7 8 1

Drumul pina la 2: 3 6 7 8 1 2

Drumul pina la 4: 3 4

Drumul pina la 5: 3 4 5

Drumul pina la 6: 3 6

Drumul pina la 7: 3 6 7

Drumul pina la 8: 3 6 7 8

Drumul pina la 9: 3 9

2- Fie G=(V, E) un graf orientat unde V={1, 2,..., n} este mulțimea nodurilor și E este mulțimea arcelor (). Fiecărui arc din E i se asociază o valoare pozitivă cij numită lungimea arcului. Să se calculeze drumurile de lungime minimă pentru oricare perechi de noduri i, j. (Pentru această problemă vom aplica metoda programării dinamice.)

2- Fie G(V, E) un graf orientat unde V={1, 2,..., n} este mulțimea nodurilor și E este mulțimea arcelor (). Pentru reprezentarea grafului se utilizează matricea costurilor C:

Să se determine un circuit care să treacă exact o dată prin fiecare vârf și care să aibă cost minim (circuit hamiltonian).

2- Se cunoaște harta unui oraș dată prin străzi și intersecții. Într-o intersecție pot sosi mai multe străzi. Unele străzi sunt cu sens unic, altele au dublu sens de circulație. Un automobilist pleacă dintr-o intersecție și vrea să ajungă printr-un parcurs minim la o altă intersecție. Scrieți un program care pentru o hartă dată determină lungimea drumului minim între mai multe perechi de intersecții.

Intrarea va fi formată dintr-o hartă. Pe prima linie se citește un număr natural n (1<=n<=100). Pe fiecare din următoarele n linii vom avea mai multe perechi de numere (v,l) ce reprezintă faptul că distanța dintre intersecția i (corespunzatoare liniei) și intersecția v este l. Datele de pe o linie se termină printr-o pereche 0 0. După aceea urmează mai multe perechi de intersecții între care se va determina distanța minimă precum și traseul de urmat.

Ieșirea va fi formată din mai multe linii, fiecare corespunzând unei perechi de intersecții.

Exemplu

Intrare

5

2 6 4 7 0 0

3 5 4 8 5 4 0 0

2 2 0 0

3 3 5 9 0 0

1 2 3 7 0 0

1 5 3 1 0 0

Iesire

Cazul 1: distanta de la 1 la 5 este 10 prin intersectiile 2

Cazul 2: distanta de la 3 la 1 este 8 prin intersectiile 2 5

 

 

3. Arbori

 

3- Să se parcurgă un arbore binar în preordine.

Exemplu:

Pentru arborele

parcurgerea în preordine ne conduce la 1,2, 3,4,5,6,7,8,9.

3- Să se parcurgă un arbore binar în inordine.

 

3- Se consideră dată o expresie logică formată din n variabile logice reprezentate de o singură literă și operatorii & (AND), | (OR), ! (NOT) (nu avem paranteze). Expresia este reprezentată sub forma unui arbore binar. Se cere să se scrie programul care crează structura de date corespunzătoare unei expresii logice date și cercetează existența unei combinații de valori logice, pentru care expresia dată prin arborele binar ia valoarea logică TRUE.

Intrarea este formată din mai multe expresii logice. O expresie este dată pe câte o linie și are maxim 80 de caractere. Expresia && indică sfirșitul datelor de intrare.

Ieșirea programului va consta dintr-o linie de text pentru fiecare set de date de test. Ea va conține numărul testului (se începe numerotarea cu 1), precum și o combinație de valori logice care fac expresia adevărată fie 'Nu avem solutie' în caz că nu există.

Exemplu

Intrare

a|!b|c&d

!a&a

&&

Ieșire

Cazul 1: Solutie a=0 b=0 c=0 d=0

Cazul 2: Nu avem solutie!

 

3- Să se contorizeze frecvența de apariție a tuturor cuvintelor citite de la tastatură. Separatorii sunt: spațiu, tab și newline.

 

3- Scrieți un program care să creeze un arbore binar de sortare, să-l parcurgă în inordine și să permită inserarea și ștergerea unui nod specificat.

3- Informațiile pentru medicamentele unei farmacii se referă la numele medicamentului, prețul lui, cantitatea, data primirii și data expirării. Evidența medicamentelor se ține cu un program care are drept structură de date un arbore. Să se scrie un program ce crează această structură de date, tipărește medicamentele în ordine lexicografică și elimină apoi medicamentele care au data de expirare peste o dată specificată.

Intrarea este formată din mai multe linii. Pe fiecare linie avem câte un medicament dat sub forma:

[nume_produs] [pret] [cantitate] [zi] [luna] [an].

Introducerea medicamentelor se termină cu o linie pe care avem doar '&'. Urmează apoi o dată calendaristică după care vor fi eliminate medicamentele ce au data de exprirare după.

Ieșirea este formată prin afișarea medicamentelor rămase, în ordine lexicografică.

Exemplu

Intrare:

aspirina 500 20 2 10 2000

paracetamol 500 50 15 4 2001

antinevralgic 600 50 10 10 2001

captopril 12000 10 1 3 2000

nifedipin 15000 5 1 10 2000

&

1 1 2001

Ieșire:

aspirina captopril nifedipin

3- Un heap este un arbore binar complet (frunzele lipsă se află pe ultimul nivel, în partea dreaptă) iar valoarea unui nod părinte nu este mai mare decât valorile descendenților săi (vezi ultima problemă de la sortări).

    1. Scrieți o funcție care șterge elementul minimal din heap.

b) Scrieți o funcție care inserează un element în heap păstrând această structură.

3- Se citeste de la intrare un arbore binar dat în reprezentarea STANG-DREPT:

a) Să se afișeze în postordine conținutul arborelui.b) Să se afișeze în inordine conținutul subarborelui drept al rădăcinii.

c) Să se transforme arborele dat prin reprezentarea lui într-un heap și să se afișeze vectorul rezultat.

Exemplu: Se consideră arborele:

6

/ \

1 3

/ \ / \

4 7 5 2

Intrare:

6 1 3 4 7 5 2 0

Iesire: Preordine: 6 1 4 7 3 5 2

Inordine: 4 1 7 6 5 3 2

Heap : 7 6 5 1 4 3 2 (daca se realizează heap-ul de sus in jos)

sau: 7 6 5 4 1 3 2 (daca se realizează heap-ul de jos in sus)

3- Se citește de la intrare un șir de valori numerice întregi, pe o linie, separate de spații, șir care se încheie cu o valoare 0. Să se memoreze aceste valori într-un vector.

Considerând că vectorul dat este reprezentarea implicită a unui arbore binar:

a) Să se afișeze în preordine conținutul arborelui.

b) Să se determine dacă arborele este heap.

c) Dacă arborele introdus este heap, să se afișeze elementele în ordine descrescătoare prin extrageri succesive din heap.

Exemplu:

Se consideră arborele:

9

/ \

8 5

/ \ / \

1 7 2 3

Intrare:

9 8 5 1 7 2 3 0

Iesire:

Preordine: 9 8 1 7 5 2 3

ESTE HEAP

Sirul ordonat: 9 8 7 5 3 2 1

3- Să se parcurgă un arbore oarecare în A-preordine și A-postordine.

4. Metoda Greedy

4- Fie o mulțime de intervale

,

unde . Să se determine mulțimea maximală de intervale disjuncte două câte două.

4- (Problema rucsacului) O persoană are un rucsac cu care poate transporta o greutate maxima GT. Persoana are la dispozitie n obiecte și cunoaște pentru fiecare obiect greutatea precum și câștigul care se obține în urma transportului său la destinație. Se cere să se precizeze ce obiecte trebuie să transporte persoana astfel încât câștigul să fie maxim.

4- Se dau n numere întregi nenule b1, b2, ..., bn și m numere întregi nenule a1, a2, ...,am. Să se determine o submulțime a mulțimii B={b1,..,bn} care să maximizeze valoarea expresiei

știind că și că .

Indicație:

- Sortăm elementele celor două mulțimi A și B.

- Dacă elementele mulțimii A sunt numere întregi pozitive alegem ultimele m elemente din șirul ordonat B.

- Dacă elementele mulțimii A sunt negative alegem primele m elemente ale șirului B.

- Dacă mulțimea A are k elemente negative și p elemente pozitive (m=k+p) vom alege primele k elemente ale șirului B precum și ultimele p elemente ale șirului B.

4- O agentie de turism are de efectuat un număr de n curse săptămânale. Pentru fiecare cursă se știe data plecării și data sosirii (acestea sunt date in ore relativ fata de ora 0 a primei zile a săptămânii). Să se determine numărul mimim de autocare necesar pentru a se asigura efectuarea tuturor curselor. Un autocar nu poate efectua într-o perioadă de timp decât o singură cursă.

4- Problema comis-voiajorului. Se dă un graf neorientat G complet. Să se determine un ciclu hamiltonian de lungime minimă.

4- Se dau șirurile S1, S2,..., Sm ordonate crescător fiecare având lungimile L1, L2,..., Lm. Se cere să se interclaseze cele m șiruri cu un număr minim de operații. Se știe că la interclasarea a două șiruri, numărul de operații este egal cu suma elementelor celor două șiruri care se interclaseaza.

4- O întreprindere primește la un moment dat t=0 spre execuție n lucrări. Fiecare lucrare necesită același timp de execuție =1. Pentru executarea lucrării a i-a, i=1,..,n unitatea respectivă are un beneficiu Ci numai dacă lucrarea a fost executată cu respectarea termenului final de livrare Ti. Întreprinderea nu poate executa două lucrări în același timp. Se cere să se determine numărul de lucrări ce îl poate executa întreprinderea astfel încât beneficiul să fie maxim.

4- Fie S o sumă de bani. Să se exprime această sumă de ani într-un număr minim de monede de 25,10,5 și 1 unităti.

4- Se consideră o rețea pătratică, care conține segmente ale căror extremități sunt puncte adiacente situate pe aceeași linie sau aceeași coloană.

Se cere să se scrie un program care să numere câte pătrate pot fi identificate în rețeaua dată (indicând și lungimea laturii). Opțional, se cere reprezentarea grafică.

4- O stație de spălare a mașinilor trebuie să spele n autovehicule. Se cunoaște timpul ti în care poate fi spălată mașina i (i=1,..,n). Să se determine ordinea de spălare a celor n mașini astfel încât timpul de staționare al unei mașini în stație să fie minim.

 

5. Metoda Divide et Impera

5- Problema turnurilor din Hanoi. Se dau trei tije A, B, C, pe tija A aflându-se n discuri de dimensiuni diferite, aranjate de la bază spre vârf de la cel mai mare la cel mai mic. Știind că se mută câte un disc la un moment dat și că nu se poate muta un disc mai mare peste un disc mai mic, să se mute toate cele n discuri de pe tija A pe tija B utilizând drept ajutor tija C. Scrieți un program care să afișeze mutările necesare deplasării.

5- Se dă o bucată dreptunghiulară de tablă cu lungimea l și înălțimea h, având pe suprafața ei n găuri de coordonate numere întregi. Se cere să se decupeze din ea o bucată de arie maximă care nu prezintă găuri. Sunt permise numai tăieturi verticale și orizontale.

5- Fiind dat un șir de numere naturale a1, a2,...,an, determinați lungimea celei mai lungi subsecvențe crescătoare. O subsecvență crescătoare este o listă cu , unde m este lungimea subsecvenței. Scrieți un algoritm pentru a determina cea mai lungă subsecvență crescătoare utilizând metoda Divide-et-Impera (O(n2)).

5- Realizați un algoritm pentru înmulțirea a n numere complexe utilizând numai 3(n-1) înmulțiri de numere reale, folosind metoda Divide-et-Impera.

5- Fiind dat un șir de numere naturale a1, a2, ..., an () se cere determinarea numărului de perechi (i, j) cu proprietatea i<j și ai>aj.

Observație: În cazul unui număr mai mare de date este bine ca acestea să fie citite dintr-un fișier text.

5- Se consideră un șir de elemente numere întregi. Să se verifice dacă un număr aparține șirului utilizând căutarea binară.

5- Se consideră un vector de lungime n. Definim plierea vectorului prin suprapunerea unei jumătăți numită donatoare peste cealaltă jumătate numită receptoare cu precizarea că dacă numărul de elemente este impar, elementul din mijloc este eliminat. În acest mod se ajunge la un subșir ale cărui elemente au numerotarea corespunzătoare jumătății receptoare.

Exemplu: vectorul (1, 2, 3, 4, 5) se poate plia în două moduri (1, 2) sau (4, 5), elementul 3 fiind eliminat conform ipotezei. Plierea se poate aplica în continuare în mod repetat până când se ajunge la un subșir de lungime 1, numit element final.

    1. Fiind dat să se determine dacă elementul i poate fi element final ca rezultat al unor plieri succesive.
    2. Să se precizeze toate elementele finale posibile.
    3. Fiind dat un element i final, să se afișeze o succesiune de plieri prin care se ajunge la el.
    4. Considerăm că valorile vectorului sunt numere întregi citite de la tastatură. Prin pliere din dublul valorii fiecărui element al jumătății receptoare se scade valoarea elementului corespunzător jumătății donatoare.
    5. Să se verifice dacă există un element final cu valoarea 0 după ultima pliere și, în caz afirmativ să se determine succesiunea de plieri corespunzătoare.

 

6. Metoda Backtracking

6- Să se genereze permutări de n elemente.

 

6- Să se genereze combinări de n luate câte k.

6- Să se genereze aranjamente de n luate câte k.

6- Să se parcurgă cu un cal o tablă de șah trecând o singură dată prin toate căsuțele.

6- Fiind dată o hartă cu n țări, se cer toate soluțiile de colorare a acesteia, astfel încât două țări cu frontiera comună să fie colorate diferit. Se știe faptul că sunt suficiente numai 4 culori pentru ca orice hartă să poată fi colorată.

6- Se dă o sumă s și n tipuri de monede având valori lei. Se cere modalitatea de plată a sumei s utilizând un număr minim de monede.

6- Se dă o sumă s și n tipuri de monede având valori lei din fiecare tip putând dispune de numai monede. Se cere modalitatea de plată minimală (din punct de vedere al numărului de monede) a sumei s utilizând aceste monede.

6- Orice număr natural se poate scrie ca o sumă de termeni, fiecare termen fiind un număr natural diferit de zero.

Exemplu: 4=3+1=2+2=2+1+1=1+1+1+1.

Notăm cu T(n) numărul de modalități distincte în care se poate scrie n ca sumă de numere naturale strict pozitive. Pentru n=4, T(n)=4. Realizați un program care să calculeze pentru un n dat () pe T(n).

6- Un grup de n persoane sunt așezate pe un rând de scaune. Între oricare doi vecini izbucnesc conflicte de interese astfel încât aceștia se reașează în rând dar între oricare doi foști vecini trebuie să existe una sau cel mult două persoane. Să se realizeze un program care să afișeze toate variantele de reașezare posibile.

6- Se dă un număr natural par n. Să se determine toate șirurile de n paranteze care se închid corect.

Exemplu: n=6 ((())), (()()), ()()(), ()(()), (())().

6- Dintr-un grup de n persoane, dintre care p femei, trebuie formată o delegație de k persoane, din care m femei. Să se precizeze toate delegațiile care se pot forma.

6- Se dau n persoane și același număr de apartamente. Fiecare persoană își indică opțiunea pentru fiecare apartament. Se cere să se repartizeze apartamentele astfel încât gradul de satisfacere a dorințelor să fie maxim. Cu cât un apartament este mai dorit preferința pentru el are o valoare mai mică, deci gradul maxim de satisfacere se va obține prin minimizarea sumei preferințelor fiecărei persoane față de apartamentul ce-i va fi repartizat.

6- Pe un mal se află n perechi soț-soție. Ei trebuie să traverseze un râu având la dispoziție o barcă de 2 locuri. Știind că barca nu merge singură și nu trebuie să ramână un barbat singur cu soția altuia, să se afișeze toate posibilitățile de trecere a râului.

6- Configurația unui teren este specificată printr-un caroiaj gen tablă de șah de dimensiune n, fiecare careu având o anumită cotă (înălțime). Într-un careu precizat al terenului se plasează o minge. Știind că mingea se poate deplasa într-unul din cele maximum 8 careuri vecine dacă acesta are o cotă strict mai mică, să se genereze toate traseele pe care le poate urma mingea pentru a părăsi terenul.

6- Se dă o matrice pătratică de dimensiuni nxn. Să se găsească drumul de cost minim de parcurgere a matricii din colțul din stânga-sus pâna în colțul din dreapta-jos. Costul unui drum este egal cu suma elementelor casuțelor prin care a trecut. Deplasarea se poate face numai pe verticală sau pe orizontală.

6- Să se scrie un program recursiv pentru a determina toate modalitățile de descompunere a unui număr în sumă de k numere naturale strict pozitive.

6- Se dă un caroiaj de dimensiune nxn. Se dau înălțimile fiecărei căsuțe. Să se găsească toate posibilitățile de a ieși din caroiaj știind că persoana respectivă nu poate urca mai mult de h0 și coborâ mai mult de h1.

6- O fotografie alb-negru este prezentată sub forma unei matrice binare. Ea înfățișează unul sau mai multe obiecte. Porțiunile corespunzătoare unui obiect au valoarea 1. Se cere să se determine dacă fotografia reprezinta unul sau mai multe obiecte. Două puncte fac parte din același obiect dacă ele sunt vecine pe verticală, orizontală sau pe diagonală.

6- Se dă o matrice binară. Valorile 1 delimitează o suprafață închisă în cadrul matricei (elementele aparținând acestei suprafețe sunt marcate cu 0). Se dau, de asemenea, coordonatele x și y ale unui punct din matrice. Să se coloreze suprafața din care face parte punctul respectiv.

6- Trebuie să deschidem seiful unei bănci. Acesta este protejat de o încuietoare cu cifru formată din n rotițe. Fiecare rotiță are pe ea inscripționate cifre de la 0 la m-1. Un cod este format din secvența a n cifre, câte o cifră de pe fiecare rotiță. Exsită o singură combinație care deschide seiful. Forma unui set de date este următoarea:

n m q cod0 a0 ... codq-1 aq-1

unde este numărul de rotițe, este numărul de cifre inscripționate pe fiecare rotiță, q>1 este numărul de încercări, codk este cea de-a k-a combinație încercată, iar reprezintă câte cifre din codk se potrivesc ca poziție și valoare cu cele din cifrul secret. Scrieți un program care să determine cifrul secret pe baza încercărilor date.

6- Se consideră o tablă de șah de dimensiune nxn () pe care sunt dispuse obstacole. Se cere să se tipărească numărul minim de mutări necesare unui nebun pentru a se deplasa, respectând regulile jocului de șah și ocolind obstacolele, dintr-o poziție inițială dată într-o poziție finală dată. Datele se citesc în ordine:

Se consideră că obstacolele nu coincid cu poziția inițială și nici cu cea finală a nebunului.

 

 

7. Metoda programării dinamice

7- Se dă un șir de numere întregi. Să se determine cel mai lung subșir crescător al acestuia. Acest subșir nu trebuie format numai cu elemente situate pe poziții consecutive în șirul inițial.

 

7- O persoană dispune de n obiecte de greutăți g1, g2, ..., gn și de un rucsac de capacitate maximă G. Câștigul pe care-l obține persoana respectivă dacă transportă obiectul i este ci. Să se determine obiectele care vor fi transportate în rucsac astfel încât câștigul să fie maxim. Obiectele sunt indivizibile: un obiect este fie luat în întregime fie nu este luat deloc.

Exemplu:

A

B

C

D

E

F

G

Cost

7

9

5

12

14

6

12

Greutate

3

4

2

6

7

3

5

Avem la dispoziție un rucsac de 15 kg. Ce obiecte ar trebui să luam astfel ca să maximizăm profitul (suma totală a valorilor obiectelor luate)? Care este valoarea maximă?

7- Se dă o mulțime de n numere întregi și un număr M. Să se determine o submulțime a sa cu proprietatea că suma elementelor este egală cu M (dacă există!).

7- Se dau două șiruri de caractere A și B. Să se determine cel mai lung subșir comun al celor două șiruri.

7- Se dau două șiruri de caractere A și B cu n respectiv m caractere. Să se transforme cuvântul A în cuvântul B utilizând următoarele operații:

    1. adăugarea unei litere - cost c1
    2. modificarea unei litere - cost c2
    3. ștergerea unei litere - cost c3

Se definește costul unei transformări ca fiind suma costurilor tuturor operațiilor efectuate. Se cere determinarea costului minim al transformării cuvântului A în cuvântul B precum și a operațiilor efectuate.

7- Pentru a putea înmulți două matrici A și B trebuie ca numărul de coloane al primei matrici A să fie egal cu numărul de linii al celei de-a doua matrici B. Pentru calculul matricei produs C=A*B, se vor realiza un număr de n*m*p înmulțiri. De exemplu dacă pentru calculul matricii C vor fi necesare 10x15x20 = 3000 de înmulțiri.

Pentru a înmulți mai mult de două matrici putem să alegem ordinea în care facem înmulțirile matricilor. De exemplu pentru putem face produsul fie în așa (XY)Z, fie așa X(YZ). În primul mod vom avea 5*20*10 = 1000 înmulțiri pentru XY și 5*35*20 = 3500 pentru rezultatul final, adică un total de 4500 înmulțiri. În cel de-al doilea mod vom avea 10*35*20 = 7000 înmulțiri pentru YZ și 5*35*10 = 1750 pentru rezultatul final, adică un total de 8750 înmulțiri.

Fiind date dimensiunile unei secvențe de matrici, trebuie determinată ordinea de înmulțire a acestora astfel încât numărul total de înmulțiri să fie minim.

Datele de intrare au următorul format: la început se citește n (numărul de matrici) urmat pe următoarele n linii de dimensiunile fiecărei matrici.

Exemplu:

Intrare:

6

30 35

35 15

15 5

5 10

10 20

20 25

Ieșire:

((A1 x (A2 x A3)) x ((A4 x A5) x A6))

7- Se dă un șir de n numere întregi (pozitive și negative). Să se determine subșirul de numere situate pe poziții consecutive care are suma maximă.

7- Se dă un șir de n numere întregi (conțin și valori nule). Să se determine subșirul de numere situate pe poziții consecutive ce are produsul maxim.

7- Se dă un dreptunghi ale cărui dimensiuni sunt numere naturale. Dreptunghiul trebuie decupat (descompus) în pătrate ale căror laturi sunt tot numere naturale și sunt paralele cu laturile dreptunghiului inițial. O tăietură într-un dreptunghi este obligatoriu făcută paralel cu o latură pe toată lungimea acesteia.

Se cere numărul minim de pătrate în care poate fi descompus dreptunghiul inițial, respectâând regula de mai sus de efectuare a unei tăieturi într-un dreptunghi.

Lungimea și lățimea dreptunghiului nu vor depăși 100.

Exemplu:

5 6

răspunsul este 3.

7- Avem un teren de formă pătrată împărțit în nxn parcele. Pe unele din aceste parcele se află amplasați copaci. Să se determine cea mai mare magazie de formă pătrată care poate fi amplasată pe teren fără să fie nevoie ca unii copaci să fie tăiați. Laturile magaziei trebuie să fie paralele cu axa orizontală, respectiv cea verticală. Datele de intrare constau din: numărul de parcele de pe o latură n (), numărul parcelelor pe care se află copaci t (), și pe următoarele t linii câte două numere întregi indicând linia și coloana unei parcele ce are pe suprafața ei copaci.

7- Se consideră un triunghi de numere naturale format din n linii. Prima linie conține un număr, a doua linie două numere,... ultima linie n numere naturale. Cu ajutorul acestui triunghi se pot forma sume de numere naturale în felul următor:

- se pornește cu numărul din linia 1.

- succesorul unui număr se afla pe linia următoare plasat sub el (aceeași coloană) sau pe diagonală, la dreapta (col+1).

Care este cea mai mare sumă care se poate forma astfel și care sunt numerele care o alcătuiesc.

Exemplu.

2

3 5

6 3 4

5 6 1 4

7- Se consideră n camere distincte, situate una după alta, astfel încât din camera i () se poate trece doar în camera i+1. În fiecare cameră se găsesc mere, pere în cantități cunoscute.

O persoană cu un rucsac suficient de încăpător, inițial gol, pornește din camera 1, trece prin camerele 2,3,..,n și iese. La intrarea în fiecare cameră descarcă rucsacul, și încarcă fie toate merele, fie toate perele din camera respectivă, după care trece în camera următoare. Se presupune că pentru fiecare fruct transportat între două camere, persoana consumă o calorie. Ce fel de fructe trebuie să încarce persoana în rucsac astfel încât după parcurgerea celor n camere să consume un număr minim de calorii și care este acest număr?

7- Se consideră n cuvinte de lungimi l1,..., ln (prin lungimea unui cuvânt înțelegem numărul de caractere din care este format cuvântul respectiv). Acestea trebuiesc așezate în ordine într-un paragraf (un text format din mai multe linii) în care lungimea unei linii este l. Fiecare linie din paragraf începe cu un cuvânt. Se cunoaște o distanța optimă b (număr de spații prin care se separă două cuvinte), însă nu este obligatoriu ca aceasta să fie respectată (poate fi mai mică sau mai mare). Totuși, distanța dintre două cuvinte nu poate fi mai mică decât o valoare . Toate cuvintele au lungimi mai mici sau egale cu l. Pentru fiecare linie din paragraf se calculeaza un cost care însumează abaterile de la distanța optimă între cuvinte la care se adauga spațiile rămase libere după ultimul cuvânt din linie până la sfârșitul liniei. În cazul în care ultima linie este incompletă, costul ei este 0. Se definește costul paragrafării ca fiind suma costurilor liniilor care formează textul. Cum trebuie plasate cuvintele pe linii în așa fel încât costul paragrafării să fie minim și care este acesta?

7- Pe suprafața planetei Marte se adună mostre de rocă cu ajutorul unor vehicule speciale. Aceste vehicule se deplasează conform unei scheme de caroiaj doar spre sud sau est și doar pe un teren lipsit de stânci. Harta pusă la dispoziție conține informații cu privire la pozițiile unde se află roci (o singură rocă se află într-o poziție) și unde sunt stânci. Harta este dată sub forma unei matrici de dimensiune nxm ce conține elemente egale cu 0, 1, 2, având semnificația:

Vehiculele pornesc din poziția (1,1) reprezentând colțul din stânga sus al hărții. Locul unde trebuie să ajungă vehiculele este colțul din dreapta jos al hărții.

Să se scrie un program care determină numărul maxim de roci ce se pot aduna de un vehicul în drumul său.

 

Exemplu:

7 7

0 0 0 0 0 0 0

0 0 1 1 0 0 0

2 0 0 1 1 1 0

1 0 0 1 1 0 0

1 0 1 0 0 0 0

1 0 0 0 0 0 0

1 0 0 0 0 0 0