Решил тут попробовать поучаствовать в тренировке. Понял, что даже А сложновата и решил посмотреть разбор — его не оказалось. Решения других людей посмотреть нельзя(????).
Единственное упрощение, до которого я додумался — можно считать, что запросов одинаковой продолжительности меньше 3, поэтому n<=60
вместо n<=400
. Но для полного перебора это все равно многовато.
Пусть n<=60. Сделаем такую динамику dp[go][sum1][sum2] — мы прошли go запросов и отдали 1 серверу запросов на время sum1, а второму sum2(sum3 — вычисляется однозначно). Считаем эту ДП и находим лучшее из достижимых состояний.
Итого O(MAXT5 + N)
P.S. Видимо ещё надо сделать следующее: пусть есть 2 запроса длины х. Прибавим всем х и добавим запрос -x. Тогда запросов уже 30
Спасибо.
Can we do it using standard dp knapsack approach (like in timus 1005)? We try to fill knapsack of size (sum of all requests/3) with all requests we have, then fill second knapsack of size (sum of what's left/2) with requests left. Will it or something like this work?