|
Titlul: 344 Bcrc Scris de: Bogdan-Cristian Tataroiu din Martie 13, 2007, 20:06:39 Aici puteţi discuta despre problema Bcrc (http://infoarena.ro/problema/bcrc).
Titlul: Răspuns: 344 Bcrc Scris de: Savin Tiberiu din Septembrie 06, 2007, 12:52:49 cam ce complexitate ar trebui la problema asta?? in afara de n*t nu prea am multe idei
Titlul: Răspuns: 344 Bcrc Scris de: Marius Stroe din Septembrie 06, 2007, 14:28:24 O(M*N) cu deque.
Titlul: Răspuns: 344 Bcrc Scris de: Cosmin-Mihai Tutunaru din Februarie 18, 2010, 11:59:12 Am încercat și eu o rezolvare în O(M2).
Intâi am adăugat cutia virtuală cu numărul de ordine 0, ce se află în încăperea 1, cu timpul = 0, iar numărul de bomboane = 0. DP[ i ]=numărul maxim de bomboane ce se pot obține din primele i cutii, luând din cutia i (dacă se poate lua din cutia i) Recurența ar fi: DP[ i ]=max(DP[ j ] + B[ i ]), 0 <= j < i și distanța dintre cutiile i și j (încăperile lor) e mai mică decât diferența de timp dintre cele două cutii. Soluți ar fi max(DP[ i ]), 0 <= i <= M. E ceva greșit în gândirea asta? Le: Am găsit greșeala până la urmă. Ideea era bună, dar fraieru de mine nu verifica mai întâi dacă în cutia pe care o continui am putut ajunge. Titlul: Răspuns: 344 Bcrc Scris de: Salajan Razvan din Iulie 30, 2012, 15:41:50 Salut!
Am facut o rezolvare M*N cu deque dar iau doar 40 de puncte;(pe restul iau tle) Din cele citite mai sus aceasta ar fi complexitatea oficiala; si totusi care ar fi problema ? Titlul: Răspuns: 344 Bcrc Scris de: Mihai Nitu din Iunie 04, 2013, 16:10:31 Am murit de gat cu problema asta.. ](*,)
Am stat doua zile sa optimizez solutia oficiala cu deque.. dar orice faceam nu-mi iesea pe testul 5. Desi am vazut in surse mai vechi de 100 ca inregistra si cu 2000-4000 ms (n-ar trebui sa iasa din timp?). Pe a mea in schimb am dus-o pana la 600 ms pe testul 4(al doilea cel mai mare) dar pe 5 tot nu-mi iesea. Pana la urma, cand chiar nu mai mergea nimic, mi-a venit ideea sa combin rezolvarea asta cu o idee ce o implementasem eu initial: cu un vector bst sa inregistrez cea mai buna valoare care se poate obtine o data cu luarea cutiei de bomboane i. Considerand cutia i, aveam nevoie de maximul bst[j] cu j<i accesibil din acest punct. Dar cutiile aparute cu n/2 timp in urma erau automat accesibile (distanta maxima intre 2 camere e n/2), deci din acelea aveam nevoie doar de maxim. Pe restul, aparute relativ devreme, trebuia sa le pastrez intr-o coada, deoarece nu erau neaparat accesibile (distanta dintre cutia i si acestea trebuie sa fie mai mica decat intervalul de timp) si trebuiau verificate. O solutie care, desi, in best case face O(m*n/2), tinde la O(m^2) in worst case (atunci cand toate cutiile apar intr-un interval de timp sub n/2) Solutia nu intra pe 4 teste, dar culmea, pe testul 5 scotea 40 ms!! Am dedus deci ca testul acela probabil se caracterizeaza prin intervale de timp mari intre cutiile de bomboane ceea ce face deque-ul mai greoi de construit (ori asta, ori chiar sunt batut in cap si imi scapa ceva). Asadar, am combinat rezolvarile intr-o singura sursa, si am facut un fel de "cautare binara" cu evaluatorul ca sa vad ce conditie sa pun sa intre numai testul 5 pe rezolvarea a doua (lucru de care nu prea sunt mandru) si am luat suta. [-X Cod: Solutia cu Deque: EDITARE: Nu stiu de ce mi-a venit deabia acum ideea sa fac deque-ul fara STL. Problema era ca functia D.clear () ia timp O(N) in timp ce implementat de "mana", trebuie sa setezi decat indicii start=1; last=0; ca sa resetezi deque-ul.. Asa am luat suta frumos.. Mi se trage de la faptul ca mi-am autoimpus in ultima vreme sa folosesc STL-ul ca sa-l invat. Evident, nu e intotdeauna bine. Editat de moderator: Nu posta consecutiv, editeaza mesajele anterioare. Foloseste tag-ul [ code ] [/ code ] cand postezi cod. |