Kolkas dirbu su 1-4 klasėmis, todėl lentelės ir turi prefix'ą tokį 
Taip, realiai man reikia sudelioti mokiniams tvarkaraštį
O sąlygų kolkas daugiau nėra
Galiu daryti ir ne realiu laiku, tačiau taip dar greičiau su php pasieki tą patį 300 sec. limitą..
Žinau, kad reikia algoritmo, bet esmė ta, kad jį turiu ( jau koks 8-tas variantas čia
), bet jis man visada kažkur kliūna
Realiai teko domėtis ir buvo pasakęs ne vienas, kad su grynu php neatliksi to arba reikalaus nežmoniškų resursų serverio, kas buvo bloga naujiena ir projektą sustabdė... O dabar asmeniškai pats noriu iš sportinio sumetimo įveikti šitą bėdą 
ps. Kol kas tik šiuo vieninteliu būdu pavyko išgauti geriausius rezultatus 
Ne prefix'as, o suffix'as.
Jei limitą pasieki – tai didink. Jei shared'e tą darai, tai nešk kailį iš ten

Na, tada belieka praktikuotis algoritmavimą (man irgi to reiktų

). Ne PHP bėda čia tikrai (tie žmonės šneka nesąmones), nėra kažkokių stebuklingų dalykų.
Nesuprantu, kur trukti penkias minutes. Apskritai, jei yra tik tiek sąlygų, kiek davei, tai eini iš eilės ir dėlioji tas pamokas... Toks visiškai vaikiškas skriptas (python, bet galima bet kuo):
from pprint import pprint
dalykai = [
['lietuviu', 5],
['matematika', 4],
['anglu', 2],
['kuno k.', 2],
]
dienu = 5
max_per_d = 3
tvarkarastis = [ [] for i in range(dienu)]
for dalykas in dalykai:
# kiekvienam dalykui
for i in range(dalykas[1]):
# kiekvienai dalyko pamokai
diena = i
# ieskom dienos, kuri nebutu pilna
while len(tvarkarastis[diena]) >= max_per_d and diena < len(tvarkarastis) - 1:
diena += 1
tvarkarastis[diena].append(dalykas[0])
pprint(tvarkarastis)
Turint omeny, kad nėra neįmanomų dalykų (pvz. šešios lietuvių pamokos per savaitę, bet nei vieną dieną nebūtų dviejų) ir nereikia tolygiai paskirstyti per dienas (savaitės pradžioje bus daugiausia ir tie patys dalykai iš eilės, tada vis mažiau) ir bus
tik viena dalyko pamoka per dieną (kelioms pamokoms per dieną apskritai čia atvejo nėra).
Ai, visgi ne optimalus skriptas, corner cases yra (kaip pvz. gale gali sumest kelias pamokas vienodas, jei jų yra daug), bet vis tiek, tikrai ne 5 minučių runtime darbas

ir toks outputas:
[['lietuviu', 'matematika', 'anglu'],
['lietuviu', 'matematika', 'anglu'],
['lietuviu', 'matematika', 'kuno k.'],
['lietuviu', 'matematika', 'kuno k.'],
['lietuviu']]
Bet kažką nutyli, nežinau, tyčia, ar netyčia.
