Top.Mail.Ru
Ответы

СРОЧНО!!! НАПИСАТЬ КОД НА ПИТОНЕ ДЛЯ ОЛИМПИАДЫ Деньги если код наберет 100.100 баллов

Красная Шапочка отправилась на болото для сбора клюквы, чтобы испечь пирожки для бабушки. Клюквенное болото представляет собой координатную прямую. Берег, на котором стоит девочка, имеет координату
0
, а клюквенная поляна — координату
N+1
. В точках с координатами
1,2,…,N
расположены кочки. Первоначально у девочки
E
единиц энергии. Красная Шапочка может прыгнуть из точки
x
в точку
y
(
x<y
), потратив на это
y−x
единиц энергии, то есть затраченная энергия равна расстоянию между кочками. После того, как девочка приземлится на кочке с координатой
i
, она получает
a
i


единиц энергии (при этом значение
a
i


может оказаться отрицательным, тогда энергия Красной Шапочки уменьшится при приземлении). Нельзя, чтобы энергия Красной Шапочки в какой-либо момент оказалась меньше нуля. Например, Красная Шапочка не может прыгнуть с кочки
1
на кочку
3
, имея одну единицу энергии, вне зависимости от того, сколько энергии она получит на
3
-й кочке, так как для осуществления такого прыжка необходимо две единицы энергии.

Так как Красной Шапочке ещё надо вернуться обратно, девочке интересно, какое максимальное количество энергии у неё может оказаться, когда она достигнет поляны (точки с координатой
N+1
).
...

1
 print('help') 
По дате
По Рейтингу
Аватар пользователя
Профи
7мес
1234567891011121314151617181920212223242526
 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)) 
 
Аватар пользователя
Знаток
7мес
123456789101112131415
 import sys 
s = int(sys.stdin.readline()) 
n = int(sys.stdin.readline()) 
a = [(elem[::-1]) for elem in enumerate([int(sys.stdin.readline()) for i in range(n)], 1)] 
f = s 
u = 0 
for j in range(len(a)): 
    e, i = a[j] 
    if i > f and a[j][0] >= 0: 
        break 
    elif i > f and e <= 0: 
        continue 
    (u, f) = (a[j][1], f + e) if f + a[j][0] >= f else (u, f) 
print((f - n - 1) % (f - n))