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