Мы можем переформулировать проблему следующим образом:
У нас есть список номеров, и мы можем активировать или деактивировать номера.Мы хотим найти максимальную сумму активированных номеров, где на каждом проходе мы можем переключаться ровно k
номеров.
Для нечетных k
мы могли бы сделать следующее: Активировать максимальное число (если оноположительным) и используйте оставшиеся (k-1)
переключатели для переключения любого числа дважды, что фактически оставит номер в его предыдущем состоянии.Следовательно, максимальное значение pass
является суммой положительных чисел.
Для четных k
это немного отличается, поскольку число активированных чисел всегда четное.Поэтому мы сначала находим все положительные числа.Пусть количество положительных чисел будет p
.Если p
чётно, то мы хороши, и сумма этих чисел является результатом.Если p
нечетно, мы должны проверить два случая: удалить наименьшее положительное число или добавить наибольшее неположительное число.Максимум этих двух случаев является результатом.
Редактировать из комментариев:
Для особого случая, когда k=n
, есть только два варианта: либо включить все числа, либо исключить все числа.Если сумма чисел больше 0, это результат.В противном случае результат равен 0.