25

Решение: Максимальная сумма трёх показаний

ЕГЭ · Информатика · Задание 25 · Динамическое программирование
ВысокаяФИПИE8867CКороткий ответ≈ 15 минутРазбор в 5 шагов
Условие

По каналу связи передаётся последовательность целых чисел — показания прибора. В течение $N$ минут прибор ежеминутно регистрирует значение напряжения в электрической сети и передаёт его на сервер. Определите три таких переданных числа, чтобы между моментами передачи любых двух из них прошло не менее $K$ минут, а сумма этих трёх чисел была максимально возможной. Даны два входных файла — файл А и файл B. В первой строке каждого файла записано натуральное число $K$, во второй — количество переданных показаний $N$ ($1 \leq N \leq 10\,000\,000$, $N > K$). В следующих $N$ строках записаны целые числа, по модулю не превышающие $10\,000\,000$. Для файла А допускается переборный алгоритм, но для файла B необходимо использовать алгоритм, работающий достаточно быстро на $N$ до $10\,000\,000$. Типовой пример: при $K=2$ и последовательности $150, -150, 20, -200, -300, 0$ искомая сумма равна $170$.

Открыть задачу и решить самому
Дальше ответЕсли ещё решаете — начните с подсказок: они ведут к ответу, но не выдают его.
К подсказкам

Решение по шагам

5 шагов
1

Нумеруем показания от $0$ до $N-1$. Для текущего показания $a_i$ предыдущие выбранные показания должны иметь индексы не больше $i-K$.

2

Поддерживаем три величины: максимальное значение одного допустимого показания, максимальную сумму пары, второй элемент которой уже допустим для текущего положения, и максимальную найденную сумму трёх показаний.

3

При переходе к позиции $i$ добавляем в множество допустимых одиночных элементов значение $a_{i-K}$. Пара, заканчивающаяся в позиции $i$, имеет сумму $a_i$ плюс максимум одиночного элемента, допустимого для этой позиции.

4

Перед обработкой $a_i$ в максимум пар добавляем значение пары, заканчивающейся в позиции $i-K$. Тогда текущая тройка может состоять из этой лучшей пары и $a_i$.

Каждая позиция обрабатывается один раз, поэтому время работы алгоритма равно $O(N)$, а дополнительная память — $O(1)$.

Ответ

Численные ответы зависят от содержимого приложенных файлов А и B; без этих файлов определить два числа невозможно.

Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.

Где здесь ошибаются

Проверяют только соседние позиции и забывают о расстоянии между любыми двумя выбранными показаниями.

Используют перебор всех троек, имеющий слишком большую сложность.

Добавляют элемент в структуру допустимых значений раньше, чем разрешено условием расстояния $K$.

Не учитывают отрицательные значения показаний.

Закрепить приёмВ теме «Динамическое программирование» ещё 71 задача — с ответом и таким же разбором.
Тренироваться

Как решать задание 25 ЕГЭ, информатика

Разбор этой задачи разложен на 5 шагов: видно, откуда берётся каждое число и где теряется балл. Ответ приведён рядом с выкладками, а не вместо них.

Задача из темы «Динамическое программирование»: в ней 72 задачи, и у каждой есть такой же разбор. Регистрация не нужна.