Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2007-01-27 22:22:05.
Revizia anterioară   Revizia următoare  

Solutii

Maxsecv

Se observa ca secventa maxima de 1 care se poate obtine are lungimea egala cu suma primelor doua secvente maxime din vectorul original. Printr-o operatie descrisa se pot alatura cu usurinta cele doua secvente.
Pentru obtinerea unei solutii liniare e suficient sa parcurgem vectorul de la stanga la dreapta si sa updatam la fiecare pas lungimea secventei curente de 1. In momentul in care ajungem la capatul unei astfel de secvente facem un update pentru primul si al 2-lea maxim, dupa caz.

(clasele 9-10)

...

Chernel

(clasele 9-10)

Considerandu-se sirul a1 a2 ... aN pentru un N fixat, se observa ca dupa N-1 transformari, acesta devine a1 * CN-10 + a2 * CN-11 + a3 * CN-12 + ... + aN * CN-1N-1 . De aici reiese ca elementele sirului initial a calor valoare nu influenteaza numarul caracteristic (numarul din ultimul sir obtinut modulo M) sunt cele ai caror coeficienti sunt multipli ai lui M. Astfel problema se reduce la numararea combinarilor de N-1 luate cate i (cu i intre 0 si N-1) care sunt multipli de M. Aceasta se realizeaza simplu "generand" combinarile respective: ne bazam pe recurenta CNk+1 = CNk * (n-k) / (k+1) si verificam cate dintre acestea sunt divizibile cu M. Problema este ca aceste valori vor deveni uriase destul de rapid, iar stocarea lor in memoria calculatorului este ineficienta. Din acest motiv nu se vor retine numerele propriu zise, ci doar exponentii factorilor primi ai lui M, (numarul maxim de factori primi ai lui fiind aproximat la O(ln ln M), si 9 pentru datele de test ale problemei) care se vor actualiza pentru fiecare combinare procesata.
Complexitatea finala a algoritmului devine astfel O(N * ln ln M).

Amenzi

(clasele 11-12)

Problema se poate rezolva folosind metoda programarii dinamice. Se construieste matricea At,i in care se retine valoarea totala a amenzilor ce poate fi data pana la momentul t astfel incat la momentul t sa fim in intersectia i. Pentru toate muchiile (j,i) de cost c vom compara At,i cu At-c,j alegand maximul dintre aceste valori. De fapt ar trebui inspectate toate valorile At-c,j At-c-1,j ... A1,j A0,j dar este clar ca maximul acestor valori se afla in At-c,j. Deasemenea trebuie considerat cazul cand politistul sta pe loc deci ne vom uita si la valoarea din At-1,i. Apoi politistul va da toate amenzile posibile la momentul respectiv in intersectia respectiva deci vom aduna respectiva suma la At,i.
Avand construita aceasta matrice se poate raspunde in O(1) la fiecare intrebare.
Complexitatea totala va fi O(Tmax * M) ca timp si O( Tmax * N ) ca memorie.

Secventa 5

(clasele 11-12)

...