Задача №1758. Увлекательная игра
Разбор добавил Александр Чистяков
Будем решать эту задачу методом динамического программирования.
1)Очевидно, что если размер оставшегося множества чисел равен 1, то больше конфет тратить не придётся-
ответом оставшееся число из множества и является.
2)Также очевидно, что в каждый момент времени минимальное количество конфет зависит только от размера
множества чисел среди которых надо найти загаданное, но ни как не зависит от самих чисел (для
множества {1, 3, 10, 19, 52} и для множества {4, 5, 6, 7, 8} загаданное число узнаётся за одинаковое
количество подобных вопросов (для этого можно задавать вопрос вида: "Искомое число больше чем k-тое
по величине в оставшемся множестве?")).
3)Теперь предположим, что мы уже знаем ответ для всех размеров множеств от 1 до (P-1). Научимся
узнавать минимальную стоимость (в конфетах) для множества размера P. Как было показано в пункте 2
мы всегда можем сформулировать вопрос, после которого нам придётся искать число либо во множестве
размера k либо во множестве размера (P-k) в зависимости от ответа Маши. При чём в зависимости от
ответа Маши Пете придётся отдать либо a либо b конфет. Таким образом оптимальным будет вопрос при
котором max(Price[k] + b, Price[P-k] + a) минимален. Этот минимум можно получить просто перебрав
все k от 1 до P-1.
4)Поскольку перебирать k нам придётся для всех P от 2 до N, суммарная сложность алгоритма
составляет O(N^2), что спокойно проходит по времени при данных ограничениях на N.Загадывается число. Можно задавать вопросы с ответом Да или Нет (штраф за Да A конфет, за Нет B конфет). Требуется определить минимальное количество конфет, необходимое для отгадывания числа в худшем случае.
Сдать: для сдачи задач необходимо войти в систему
2040
statement