Ctrl K

Недели отдыха с перелётами

Сложная
Компания разрешает сотруднику провести k недель, переезжая между n офисами в разных городах (номера от 0 до n - 1). В понедельник первой недели он находится в офисе 0. Матрица routes размером n × n описывает рейсы: routes[i][j] = 1, если из города i есть прямой рейс в город j, иначе 0 (рейс из города в него же не бывает, обратный рейс не гарантирован). Лететь можно только утром в понедельник и не больше одного раза за этот понедельник — либо остаться на месте. Перелёт занимает ноль времени. Матрица rest размером n × k: rest[i][w] — сколько дней можно отдыхать в городе i на неделе w. Отдых засчитывается городу, в котором сотрудник проводит неделю (если он прилетел в понедельник, неделя уже считается в новом городе). Остальные дни недели он работает. Верните наибольшее суммарное число дней отдыха за k недель.
Пример 1
routes=[[0, 1, 0], [0, 0, 1], [1, 0, 0]], rest=[[2, 1, 0], [5, 0, 4], [0, 6, 7]] → 18

Неделя 1: летим в офис 1, отдыхаем 5 дней. Неделя 2: летим в офис 2, отдыхаем 6. Неделя 3: остаёмся там, ещё 7. Итого 18.

Пример 2
routes=[[0, 0], [0, 0]], rest=[[3, 2], [7, 7]] → 5

Рейсов нет, поэтому все недели проходят в офисе 0: 3 + 2 = 5.

Ограничения
  • n = len(routes) = len(routes[i]) = len(rest)
  • k = len(rest[i])
  • 1 ≤ n, k ≤ 100
  • routes[i][j] — 0 или 1, routes[i][i] = 0
  • 0 ≤ rest[i][w] ≤ 7
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый большой горящий блок СложнаяПереход через пещеру СложнаяСамый длинный подъём по карте СложнаяЯгодное поле туда и обратно СложнаяПятнашки на шесть клеток Сложная
загружаем Python…
Вход
routes=[[0, 1, 0], [0, 0, 1], [1, 0, 0]], rest=[[2, 1, 0], [5, 0, 4], [0, 6, 7]]
Ожидается
18

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 63 теста на сервере, включая скрытые.