Если нужна только сумма, а не сам набор чисел, то можно развернуть рекурсию в 2 вложенных цикла (один от n до 0, другой от 0 до 1) и хранить только 3 последних строчки массива dp.
такой набор ходов, при котором все взятые человеком карточки давали бы большую сумму, чем те карточки, которые взял робот- это авторская постановка задачи.
считать "сумма у человека минус сумма у робота" - тоже неправильно- это ваше суждение. Тут, видимо, комментарии излишни.
l = [1, 2, -6, 7, 4, 3]
x, y, *l = [*l, 0, 0]
INF = -10 ** 9
a, b, c, d, e = [], [INF], [INF], [INF], [INF]
for z in l:
a, b, c, d, e = (
max((b, [*a, -x]), key=sum),
[*a, x, -y],
max((d, [*c, -x]), key=sum),
max((e, [*c, x, -y]), key=sum),
[*a, x, y, -z])
x, y = y, z
print(max((a, b, c, d), key=sum)[:len(l)])
bot/send_message
Так его, проклятого!