Pagini recente » Diferente pentru utilizator/ryuzaki intre reviziile 17 si 4 | Diferente pentru utilizator/mihaipriboi intre reviziile 6 si 5 | Diferente pentru deque-si-aplicatii intre reviziile 120 si 119 | Autentificare | Diferente pentru deque-si-aplicatii intre reviziile 56 si 57
Nu exista diferente intre titluri.
Diferente intre continut:
h3. Soluţie:
Să o rezolv întâi...
Voi face un desen pentru explicaţii. :)
== code(cpp) |
Algoritmul este:
// S[] şirul iniţial de numere iar N lungimea sa
// (last, i] este intervalul de lungime maximă care se termină în i a cărui sumă nu depăşeşte M
sum = 0;
last = 0;
// indicii head si tail ai dequeului
deque[head = tail = 1] = 0;
pentru i = 1, N execută
sum += S[i];
temp = bst[ deque[tail] ];
cât timp (head <= tail) şi S[ deque[tail] ] <= S[i] execută
temp = Min(temp, iMin[tail]);
tail --;
sfcâttimp
// adaug poziţia i la deque
tail ++;
deque[tail] = i;
// actualizez iMin[]
iMin[tail] = temp;
// actualizez T[]
update(T, tail, iMin[tail] + S[i]);
cât timp (head <= tail) şi (sum > M) execută
sum -= S[last];
dacă (deque[head] == last) atunci
head ++
sfdacă
iMin[head] = query(bst, last, deque[head] - 1);
update(T, head, M[head] + S[ deque[head] ]);
last ++;
sfcâttimp
// reţin optimul pentru poziţia curentă
bst[i] = query(T, head, tail);
sfpentru
scrie bst[N];
Sfârşit.
==
h3(#problema-6). Problema 6: 'Bcrc':problema/bcrc (Stelele Informaticii 2006)
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.