Editorial for Kosmodrom
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Analiza
Da bismo odredili pronašli optimalno rešenje, isprobaćemo svih
mogućih izbora za broj prevrnutih kutija
(gde
). Neophodno je da za svako
odredimo najveće čekanje, i onda je
ukupno rešenje minimum tih vrednosti.
Najveće čekanje ćemo odrediti tako što za svaku raketu izračunamo
koliko će čekati i uzmemo maksimum tih vrednosti. Ovo možemo da
uradimo u -- nakon što "okrenemo" prvih
elemenata niza
, za svaku kutiju znamo da će se "osloboditi" kada sve kutije iznad
nje budu odnesene, tj. da će
-ta kutija biti na vrhu gomile u
trenutku
i samim tim čekati
(na kutiju ne može da se čeka negativno dugo). Računanje ovih
maksimuma u linearnom vremenu (prolaženjem kroz
) daje ukupno
kvadratnu složenost za određivanje čekanja svih raketa (za fiksno
).
Ako za računanje gore opisanih maksimuma iskoristimo već izračunatu
vrednost za prethodni element niza (posmatramo maksimum prethodne
vrednosti i trenutnog elementa ), možemo odrediti sva čekanja
u jednom prolazu kroz niz, tako da je ukupna složenost
(
za svako
).
Za fiksno , kutije možemo podeliti u dve grupe -- one koje su u
prevrnutom delu gomile i kutije ispod prevrnutog dela. Označimo
maksimalna čekanja u ove dve grupe sa
i
redom.
Za fiksno , najveće čekanje u okrenutom delu gomile je uzrokovano
ili jednom od kutija iz prvih
(u originalnom nizu) koja čeka na
-tu (sada gornju), ili čekanjem jedne od prvih
na drugu iz
istog skupa. Prva vredmost se može odrediti kao
, a druga je jednaka
, tako da se ceo niz
može
izračunati u
(opet, neophodno je da pamtimo maksimume svih
prefiksa i računamo ih kao u prethodnom delu).
Pošto na kutije koje nisu okrenute ne utiče raspored kutija iznad njih,
za vremena čekanja koja utiču na možemo uzeti vremena za
(koja računamo u
na ranije opisan način), gde je
maksimum
sufiksa ovog niza. Kao i za čekanja, ovo možemo odrediti u jednom
prolazu (unazad), na osnovu već izračunatog
.
Nakon što u linearnom vremenu izračunamo nizove i
, konačno
rešenje je najmanja vrednost
, tako da je ukupna
složenost algoritma
.
Comments