— А если разделить обоз перед этим подъёмом? Лошади могут перенести часть груза по верхней тропе, тогда мосту останется меньший вес.
Макиас быстро пересчитал числа.
— Это позволяет отправить топливо в третью крепость на день раньше.
— Но продовольствие для второго отряда всё равно задерживается, — заметила Эмма.
— Значит, часть нужно передать через промежуточный склад.
— Тогда первый отряд останется без резерва на обратный путь, — сказал Юсис.
Мы продвинулись на несколько строк, но потом снова упёрлись в ограничение. Чем больше людей подключалось, тем яснее становилось, что задача требовала какого-то общего метода, а не бесконечного перебора отдельных решений.
Фи всё это время спокойно ела орехи. Она сидела на краю стола, наблюдала за нашими расчётами и время от времени отодвигала чужую тетрадь, чтобы освободить место для пакета.
— Ты могла бы хотя бы посмотреть, — сказал Макиас.
— Я посмотрела.
— И?
— Слишком много чисел.
— Полезнейший вывод.
Эмма работала с сосредоточенным видом, переписывала данные в таблицу и проверяла ограничения по каждому маршруту. Макиас уже растрепал все свои волосы и несколько прядей торчали в разные стороны, Юсис ажно снял пиджак и закатал рукава, а остальные постепенно начали чувствовать себя полными идиотами перед всего лишь одной единственной страницей учебника.
В этот момент в библиотеку вошли Това, Кроу и Джордж. Президент студсовета несла папку, Джордж держал несколько технических журналов, а Кроу шёл между ними с настолько довольной улыбкой, будто снова сумел навязать товарищам собственную работу.
Това увидела толпу вокруг нашего стола и остановилась.
— Первокурсники?! Что это вы тут устроили?
Все одновременно повернулись к ней.
— Сейтокайчо! Спасайте!
— Э?! Э-э-э?!
Её буквально втянули в круг, посадили возле карты и положили перед ней условие. Джордж с Кроу заглянули через плечо.
Кроу прочитал первые строки.
— Бля-я-я… Это что-то прямо вообще нереальное!
Джордж дочитал до таблицы грузоподъёмности.
— Я могу рассчитать расход топлива каждой машины, но здесь ведь ещё нужно выбрать маршруты и распределить партии. Кто вообще вставил такое в пробный экзамен?!
— Преподаватель, который нас ненавидит, — сказал Эллиот.
Все призадумались, а потом хором сказали.
— Походу это дело рук Найтхарта…
Това быстро разобралась в обозначениях и начала группировать ограничения. Её появление дало нам ещё несколько полезных связей, но общего решения всё равно не находилось. Время шло, за окнами начало темнеть, а на столе уже лежало столько исписанных листов, будто мы готовили план настоящей военной операции.
Я смотрел на таблицу маршрутов, где четыре склада соединялись с тремя крепостями, потом переводил взгляд на запасы и потребности. В памяти неожиданно всплыл большой университетский кабинет из прошлой жизни, доска с клетчатой таблицей и преподаватель, который объяснял какую-то задачу про заводы, магазины и стоимость перевозок.
"Погоди-ка… Там ведь было что-то похожее, только там вместо боеприпасов были детали, вместо крепостей — склады, а маршруты записывали в матрицу…"
Я взял чистый лист и нарисовал таблицу. По строкам разместил источники грузов, по столбцам — крепости. В каждой клетке записал допустимый объём, время пути и стоимость перевозки. Затем отметил запрещённые маршруты, ограничения мостов и обязательные минимумы для каждого отряда.
Макиас заметил мои записи.
— Что ты делаешь?
— Кажется, я нашёл метод, который нам поможет. В одном старом учебнике я кажется видел похожую схему. Нужно сначала построить допустимый план без попытки сразу же сделать его лучшим, а потом сравнивать соседние маршруты по замкнутым цепочкам и переносить груз туда, где общая стоимость уменьшается.
— Замкнутым цепочкам? — переспросила Эмма.
Я показал четыре клетки, соединённые прямоугольником.
— Если добавить груз здесь, столько же нужно убрать отсюда, а потом добавить в следующей точке и снова убрать в последней. Общий объём сохранится, потребности крепостей не изменятся, зато можно будет проверить, станет ли маршрут быстрее или дешевле.
Това быстро поняла идею.
— А! То есть мы не перебираем все варианты, а начинаем с одного допустимого распределения и затем улучшаем его шаг за шагом?
— Именно!
Джордж взял другой лист.
— Ограничение мостов можно записать как верхний предел клетки.
— А расход топлива объединить с временем в общий коэффициент, — добавила Алиса.
— Боеприпасы нельзя опускать ниже обязательного минимума, — сказала Лаура.
Макиас сразу же выпрямился.
— Все данные у нас уже есть! Давайте разделимся — Эмма и Джордж считают топливо, Алиса с Минт проверяют технику, Гайус, Ламберт и Лаура уточняют время движения, а Това занимается общими ограничениями, а я сведу всё в одну таблицу.
— А я? — спросил Кроу.
— Просто не мешай! — ответили сразу несколько голосов.
Работа наконец-то сдвинулась с мёртвой точки. Мы построили первый допустимый план, нашли перегруженный мост, перераспределили две партии через промежуточный склад и сократили общий расход, но потом обнаружили, что третья крепость получает боеприпасы слишком поздно, поэтому пришлось изменить движение конного обоза. Ламберт подсказал реальную скорость лошадей на подъёме, Гайус учёл состояние горной дороги, а Юсис проверил, чтобы ни один отряд не оставался без резерва.
Каждое новое улучшение открывало следующую ошибку, но теперь мы хотя бы примерно понимали, что надо делать. Эмма находила выгодные цепочки, Фи время от времени указывала на маршрут, где обоз оказался бы слишком уязвим для нападения, а Розина переписывала промежуточные результаты чистым почерком. Даже Винсент принёс сведения о правах местных властей на реквизицию повозок, которые позволили добавить один временный транспортный узел.
Через два часа таблица наконец-то сошлась. Все крепости получали необходимый минимум, мосты выдерживали нагрузку, расход топлива укладывался в запас, а общий срок операции сократился на два дня по сравнению с первоначальным вариантом.
Макиас собрал листы, объединил расчёты и подготовил последовательный доклад. Затем передал всё Юсису.
— Почему мне?
— Ты лучше всех объясняешь вслух! Только не добавляй аристократического пафоса.
— Постараюсь говорить на уровне, доступном даже тебе.
Юсис вышел к свободной части стола, положил перед собой итоговую таблицу и начал объяснение. Он сперва показал, как строится допустимое распределение, затем разобрал ограничения по каждому маршруту и провёл мелом на переносной доске замкнутую цепочку. После этого на конкретных числах продемонстрировал, как перемещение одной партии уменьшает общий расход без изменения объёма поставок.
Все слушали молча. Когда он закончил последнюю строку и обвёл итоговое значение, по залу прокатилось коллективное понимание.
— А-а-а! Так вот оно как делается…
— Вот теперь-то всё понятно!
— Почему в учебнике нельзя было написать именно так?
— Потому что автор ненавидит студентов.
Кроу откинулся на спинку стула и самодовольно сложил руки за затылком.
— Ну вот, ребятки! Если бы не я, то вы бы тут до сих пор хернёй страдали…
Вск классы повернулись к нему и крикнули хором.
— ИДИ В ЖОПУ! ТЫ ВООБЩЕ НИЧЕГО НЕ ДЕЛАЛ!!!
Кроу прижал ладонь к сердцу.
— Ах! Вы меня обидели. Кхы-ы-ы… Я ведь всё это время поддерживал моральный дух группы.
— Ты съел несколько бургеров просто так! — сказала Това.
— Поддержание духа требует энергии.
— Я сейчас поддержу пинками твоё ускоренное движение к выходу! — пообещал Джордж.
За окнами уже стояла темнота. Лампы освещали стол, вокруг лежали пустые чашки, крошки, смятые черновики и книги, которые давно следовало вернуть на полки. Библиотекарша появилась рядом так тихо, что Кроу едва не упал со стула.