Контест Senior Динамическое программирование обновлено

Торговля акцией с комиссией и днём перерыва

Условие

Известна цена акции на n дней вперёд. Можно совершать сколько угодно сделок «купить одну акцию, потом продать», но:

  • в каждый момент на руках не больше одной акции;
  • за каждую продажу платится комиссия f;
  • после продажи следующий день пропускается (купить можно не раньше чем через день после продажи).

Покупка и продажа в один день бессмысленны. Найдите максимальную прибыль (если торговать невыгодно, 0).

Ввод: в первой строке n и f (1 ≤ n ≤ 2500, 0 ≤ f ≤ 10⁹), во второй n цен (1 ≤ pᵢ ≤ 10⁹).

Вывод: максимальная прибыль (может не поместиться в 32 бита).

Пример 1

Ввод:

5 0
1 2 3 0 2

Вывод:

3

Пример 2

Ввод:

6 2
1 3 2 8 4 9

Вывод:

6

Как подойти

Подсказки: 2
  1. Опишите, в каком «состоянии» вы можете быть в конце дня.
  2. Три состояния: держу акцию, только что продал, свободен.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.