На сайте acmp.ru добавились 300 новых задач, и сейчас самое время их решить. Очень интересная задача. Одно условие чего стоит! Оно даёт введение в булеву алгебру, если вдруг раньше не приходилось иметь с ней дела (но это, правда, вряд ли). Итак, нужно максимизировать количество единичек. Воспользуемся методом динамического программирования. Состоянием динамики будет пара: сколько операций уже сделали и какой результат (0 или 1). Значение - количество единичек. А переходов два: поставить 0 и поставить 1. Или меньше, так как заданная булева функция накладывает ограничения. Рассмотрим получившуюся таблицу на первом примере: Но в этой задаче надо восстановить и саму последовательность. И есть два способа:
- для каждой клетки запоминать a и b, при которых получилось максимальное значение, и тогда с помощью этих значений можно будет сделать обратный ход, выписывая значения b,
- ничего дополнительного не запоминать, а при обратном ходе снова вычислять лучшие a и b. В решении ниже реал