Editorial for Petlja
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Sistem nejednačina
Označimo sa indekse (promenljive) ugnježdenih petlji.
Svaki put kada se telo najdublje petlje izvrši, znamo da su već zadovoljeni neki uslovi za ove indekse, tačnije za svaki indeks znamo da važi
Odnosno, odatle vidimo da važi za kao i za .
Takođe iz uslova zadatka znamo da važi i .
Ovime smo dobili sistem nejednačina po promenljivama , a broj rešenja tog sistema nejednačina je upravo traženo rešenje.
Slučaj kada su sve promenljive različitih vrednosti
Primetimo da dok brojimo rešenja nisu mnogo bitne tačne vrednosti promenljivih (kojih može biti mnogo, odnosno od ), već samo relativan redosled promenljivih. Ukoliko pogledamo slučaj kada su vrednosti svih promenljivih različite, nama je zapravo bitan broj permutacija Perm brojeva od za koje može da važi: Odnosno koje se uklapaju u dati sistem nejednačina.
Ukoliko je broj ovih permutacija jednak , ukupno rešenje bi bilo zbog toga što možemo izabrati različitih brojeva od za rešenja za svaku validnu permutaciju.
Uopšteni slučaj
Pošto neke promenljive mogu da budu jednake, potrebno je da posmatramo opšti slučaj. Pretpostavimo da ćemo imamti različitih brojeva u rešenju (svakako važi da je ). Svakoj promenljivoj ćemo dodeliti neku vrednost od . Takođe, po pretpostavci, svaki od brojeva od će biti dodeljen bar jednoj promenljivoj. One promenljive kojima je dodeljen isti broj označavaju da su one jednake u krajnjem rešenju, a vrednost brojeva označava relativan raspored između promenljivih. Odnosno, imamo da je:
Takođe,
Za ovakve vrednosti kažemo da su validne ukoliko tako dobijene nejednačine uklapaju sa datim sistemom nejednačina.
Za svako (od ) ćemo izbrojati koliko ima validnih rasporeda . Taj broj je opet potrebno pomnožiti sa , slično kao i u prvom slučaju.
DP nad skupovima
Pošto je malo (do 15), ove rasporede možemo brojati dinamičkim programiranjem nad skupovima.
Gledajmo podskup nekih promenljivih . Neka je broj validnih rasporeda vrednosti nad ovim skupom promenljivih , gde će svaka vrednost biti najviše . Izaberimo neki podskup . Tom podskupu promenljivih ćemo svima dodeliti istu vrednost 1, što označava da će one biti manje od ostalih iz tog podskupa, a iste međusobno. Ostalima (odnosno podskupu ) ćemo dodeliti veće vrednosti (), a bitno je primetiti da je broj tih rasporeda za skup onda isti kao .
Ono što treba da pazimo je i da se to uklapa sa sistemom nejednačina, odnosno da sve promenljive u smeju da budu manje od svih promenljvih u .
To ćemo raditi tako što ćemo, pre svega, za svaku promenljivu pamtiti skup , odnosno skup promenljivih koje po datom sistemu moraju da budu manje ili jednake od . Takođe, za svaki podskup možemo da izračunamo skup , odnosno uniju svih promenljivih koje po sistemu su potrebne da budu manje od neke promenljive iz .
Ovime dobijamo da za izabran skup (i time dobijen skup ) mora da važi , da bi sistem i dalje ostao zadovoljen.
Konačno, dobijamo rekurzivnu formulu:
Kao i ukupno rešenje:
Ukoliko pažljivo kucamo operacije nad skupovima i podskupovima, ukupna složenost ovog rešenja je .
Zadatak je preuzet sa , takmičenje
Comments