def max_energy(N, E, a):
# Инициализируем dp массив длиной N+2 (кочки и поляна)
dp = [-float('inf')] * (N + 2)
dp[0] = E # В начальной точке энергия равна E
# Проходим по каждой кочке
for i in range(N + 1): # Начиная с 0 до N включительно
if dp[i] < 0: # Если энергии на кочке i нет, пропускаем её
continue
# Рассчитываем, куда можем прыгнуть дальше
for j in range(i + 1, N + 2):
cost = j - i # Затраты на прыжок
if dp[i] >= cost: # Если хватает энергии на прыжок
dp[j] = max(dp[j], dp[i] - cost + (a[j - 1] if j <= N else 0))
# Результат в точке N+1
return dp[N + 1]
# Ввод данных
N = int(input()) # Количество кочек
E = int(input()) # Начальная энергия
a = list(map(int, input().split())) # Энергии на каждой кочке
# Вывод максимальной энергии на поляне
print(max_energy(N, E, a))
0
, а клюквенная поляна — координату
N+1
. В точках с координатами
1,2,…,N
расположены кочки. Первоначально у девочки
E
единиц энергии. Красная Шапочка может прыгнуть из точки
x
в точку
y
(
x<y
), потратив на это
y−x
единиц энергии, то есть затраченная энергия равна расстоянию между кочками. После того, как девочка приземлится на кочке с координатой
i
, она получает
a
i
единиц энергии (при этом значение
a
i
может оказаться отрицательным, тогда энергия Красной Шапочки уменьшится при приземлении). Нельзя, чтобы энергия Красной Шапочки в какой-либо момент оказалась меньше нуля. Например, Красная Шапочка не может прыгнуть с кочки
1
на кочку
3
, имея одну единицу энергии, вне зависимости от того, сколько энергии она получит на
3
-й кочке, так как для осуществления такого прыжка необходимо две единицы энергии.
Так как Красной Шапочке ещё надо вернуться обратно, девочке интересно, какое максимальное количество энергии у неё может оказаться, когда она достигнет поляны (точки с координатой
N+1
).
...