РУҚА
27

Шешімі: Максимальная сумма без делимости

ЕГЭ · Информатика · Тапсырма 27 · Динамикалық бағдарламалау
ЖоғарыФИПИ549B82Қысқа жауап≈ 15 минутТалдау 4 қадам
Условие

Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел не делилась на $k = 109$ и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно.

Даны два входных файла — файл A и файл B. Каждый файл содержит в первой строке количество троек $N$ ($1 \leq N \leq 1\,000\,000$). Каждая из следующих $N$ строк содержит три натуральных числа, не превышающих $12\,000$.

Для приведённого в условии примера, если $k = 5$, искомая сумма равна 44. В ответе укажите значение искомой суммы для файла A, затем для файла B. Для обработки файла B нельзя использовать перебор всех возможных вариантов.

Вложенные файлы с исходными данными в предоставленном наборе отсутствуют, поэтому числовые значения ответов для файлов A и B определить невозможно.

Тапсырманы ашып, өзіңіз шешіңіз
Дальше ответЕгер әлі шешіп жатсаңыз – кеңестерден бастаңыз: олар жауапқа жетелейді, бірақ оны ашпайды.
К подсказкам

Шешім по шагам

4 қадам
1

Состояние динамического программирования определяется остатком текущей суммы при делении на $109$. Для каждого остатка сохраняется наибольшая возможная сумма.

$$dp[r] = \text{максимальная сумма с остатком } r$$
2

При обработке очередной тройки перебираем только три варианта выбора. Для каждого прежнего остатка $r$ и числа $x$ из тройки обновляем состояние с новым остатком.

$$new[(r+x) \bmod 109] = \max(new[(r+x) \bmod 109],\, dp[r]+x)$$
3

После обработки всех троек запрещён остаток $0$. Поэтому ответом является максимум среди состояний с остатками от $1$ до $108.

$$\max\{dp[r]\mid 1 \leq r < 109\}$$

Численные ответы для файлов A и B нельзя вычислить без самих файлов с исходными данными.

Жауап

Численные значения ответов для файлов A и B не определяются без приложенных входных файлов.

Бұл жауап талдау нәтижесінде алынды, бірақ банктің ресми кілтімен тексерілген жоқ — проверьте выкладки, прежде чем заучивать результат.

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

Хранить только одну максимальную сумму и потерять информацию об остатке.

Разрешить выбирать несколько чисел из одной тройки или не выбирать ни бір.

Қосу сумму с остатком 0 в итоговый максимум.

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

Закрепить приёмВ теме «Динамикалық бағдарламалау» ещё 71 тапсырма — жауабымен және дәл осындай талдауымен.
Жаттығу

Тапсырманы қалай шешу керек 27 ЕГЭ, информатика

Бұл есептің талдауы келесіге бөлінген: 4 шага: видно, откуда берётся каждое число и где теряется балл. Жауап есептеулердің жанында келтірілген, олардың орнына емес.

Задача из темы «Динамикалық бағдарламалау»: в ней 72 задачи, и у каждой есть такой же разбор. Тіркеу қажет емес.