Очень классная задача на динамическое программирование, в которой надо ещё придумать, как быстро посчитать результат. Читаем условие: Идея динамического программирования лежит на поверхности - чтобы вычислить стоимость для N надо знать стоимость для S и N - S (и правильно распределить, к чему прибавить 1, а к чему - 2). Получаем одномерную динамику - ответ зависит лишь от количества элементов в множестве. База динамики: для 1 ответ 0. Если загаданное число среди одного, то не надо задавать вопросов, чтобы узнать, что это за число. Шаг динамики: проверить все разбиения числа N на два натуральных слагаемых и выбрать оптимальное. Для примера получается такая таблица: Давайте посмотрим, как для 8 получается ответ. Есть четыре варианта получения девятки: 1 + 7, 2 + 6, 3 + 5, 4 + 4. Очевидно, что меньшее множество надо помещать в S, чтобы двойка добавлялась к меньшему числу, чтобы не ухудшать худший случай. Тогда получается: Оптимальное разбиение - 3 + 5 - с ответом 5 конфет. Однако такое ре