Вызов с разрешения моего конкурса на участие в университетском коде
Зависимость, которую мы имеем от мобильных телефонов, заставляет нас заряжать их каждую ночь до максимального уровня заряда батареи, поэтому мы не рискуем разрядиться к середине следующего дня. Есть даже люди, которые, когда видят бесплатную розетку в течение дня, выставляют ее за то, что может случиться.
Я являюсь одним из них.
За прошедшие годы я усовершенствовал свою технику, чтобы не заряжать батарею по максимуму каждую ночь. Благодаря моим хорошо известным повторяющимся процедурам мне ясно, в какое время дня я буду в состоянии выполнять эти частичные перезарядки (и на сколько единиц будет увеличиваться уровень), и что понижает уровень заряда батареи между каждым зарядом. Используя эти данные, каждую ночь я вычисляю минимальный уровень заряда батареи, с которым я должен выходить из дома на следующий день, чтобы он никогда не опускался ниже моего добровольного порога в две единицы.
То, что мне еще не удалось освоить, - это тот же самый расчет, когда я покидаю установленную рутину, и у меня есть несколько альтернативных действий. Это происходит, например, в дни, когда я нахожусь в пути в другой город, куда я могу приехать разными способами.
В моем первом подходе к проблеме я предполагаю, что хочу переместиться вокруг «шахматной доски», от верхнего левого угла до нижнего правого угла. В каждой «ячейке» я могу либо зарядить мобильный телефон определенной суммой, либо я не могу, и уровень его загрузки снижается.
Вызов
Учитывая целую матрицу FxC, выведите минимальное значение уровня заряда батареи, которое мне нужно, чтобы перейти из верхнего левого угла в нижний правый, при этом уровень нагрузки никогда не опускался ниже 2 единиц.
В матрице положительное число указывает, сколько я могу зарядить свой мобильный телефон, прежде чем я должен возобновить следовать по моему пути, в то время как отрицательное число указывает, что нет розеток и что батарея мобильного телефона падает уровень заряда на эту сумму. Гарантируется, что величины в ячейках источника и назначения (верхний левый и нижний правый угол) всегда равны 0, а остальные значения (абсолютное значение) не превышают 100.
Пример
:
Путь мне нужно меньше батареи это:
И минимальный уровень заряда батареи мне нужно 4
Ноты
- Старт всегда будет в верхнем левом углу
- Конец всегда будет в правом нижнем углу
- Вы не можете перейти в камеру, которую вы уже прошли. Пример: Попав в позицию (0,1), вы не можете перейти к начальной точке (0,0)
- Уровень заряда батареи не может (по любой причине) упасть ниже 2
- Вы можете предположить, что всегда будет начало и конец
- Вы можете взять одномерные массивы как многомерные, если вам нужно
[1,2,3] == [[1,2,3]]
- Может быть несколько правильных (минимально необходимый заряд) путей
- Ваша цель - выводить только самый низкий начальный уровень заряда батареи, а не маршрут
- Вы можете идти только вертикально и горизонтально (не по диагонали)
Тестовые случаи
[0, 0] => 2
[0, 1, 0] => 2
[0, -1, 0] => 3
[0, 15, -20, 5, 0] => 7
[[0, -3],[-5, 0]] => 5
[[0, -5, -9, 5], [-3, 5, 2, -2], [2, -4, -4, 0]] => 5
[[0, -1, 1, -1], [-1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, 0]] => 4
[[0,1,-1],[-9,-9,1],[-9,1,-1],[-9,-1,-9],[-9,1,0]]
0s
размещены один в верхнем левом углу, а другой в правом нижнем