А когда люди с листа пишут с двумя переменными — это колдунство.
Объясняю про грабителей сначала (где только положительные числа):
У нас каждое число есть вариант: брать или не брать, я предлагаю БРАТЬ каждый раз (`sum1 + n`), но в случае чего отказываться от предыдущего результата (`sum2 - prev + n`).
т.е. 3+ раза НЕ брать нам никогда не выгодно (только положительные в это задачке), т.е. у нас будет такие ситуации:
0) Пропускать 0 раз нам запрещено, это было бы просто суммой всех элементов
1) Пропускаем 1 раз. Мы постоянно чередуем, т.е. идет игра на повышение (1,2,3,4,5 – каждый раз хотим сбросить предыдущий и взять новый, но тогда нам надо будет чередовать **ВСЕГО 2 СУММЫ**)
2) Пропускаем 2 раза. Мы *обрезаем* наши предыдущие результаты, нам не важно что было до этого, у нас идут числа 100 1 1 100 (т.е. нам единички вообще не надо брать), в этом случае sum1 == sum2
def maxSubsetSum(arr):
sum1 = sum2 = prev = 0
for n in arr:
sum1 = max(sum2 - prev + n, sum1 + n)
sum1, sum2 = sum2, sum1
prev = n
return max(sum1, sum2)