РУҚА
27

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

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

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

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

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

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

Условие как в банке ФИПИ — открыть и сверить
Дұрыс жауапты жазыңыз.

Тапсырма выполняется с использованием прилагаемых
тапсырмаға файлов.

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

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

Входные данные.

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

Пример организации исходных данных во входном файле:

6

1 3 7

5 12 6

6 9 11

5 4 8

3 5 4

1 1 1

Для указанных входных данных, в случае, если k = 5, значением искомой суммы является число 44.

В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.

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



Сіздің жауабыңыз

Формат: өлшем бірліктері жоқ сан немесе сөз; бөлшек бөлігін үтірмен бөліңіз.

!
3 уровня: от лёгкого толчка до почти готового решения. Следующий открывается, алдыңғысы оқылған кезде, — жауапқа бірден секіріп кетпеу үшін.
1Мягкая — с чего смотретьдеңгей 1 из 3

Как хранить максимальную сумму для каждого возможного остатка по модулю $109$ после обработки очередного числа троек?

2Жетекші — қандай сандарды есептеудеңгей 2 из 3

Используйте динамическое программирование: для каждого остатка храните максимальную достижимую сумму. При добавлении числа $x$ новый остаток равен $(r+x) \bmod 109$.

3Тікелей — іс жүзінде шешімдеңгей 3 из 3

Инициализируйте $dp[0] = 0$, остальные значения — минус бесконечностью. Для каждой тройки постройте новый массив: $new[(r+x) \bmod 109] = \max(new[(r+x) \bmod 109], dp[r]+x)$. После обработки всех троек найдите максимум среди $dp[r]$ при $r \ne 0$.

Всё равно не складывается?Полное Шешім с обоснованием каждого шага — на отдельной странице.
Шешімді ашу

Тапсырма 27 ЕГЭ, информатика

Задача из темы «Динамикалық бағдарламалау»: в ней 72 задачи жауабымен және қадамдық талдауымен. В 27-м номере бланка — 49 задач.

Жауапты осы жерде тексеруге болады, ал егер шықпаса — ашуға болады көмекші кеңес немесе талдау. Тіркелу қажет емес.