Составьте список чисел, которые на данный момент являются нечетными или четными суммами, соответствующими каждому числу;например, для ввода [1,2,4,1,2,3,5,3,1,2,3,4,5,2]
нечетно-четные суммы были бы [1,2,5,3,7,6,12,9,13,11,16,15,21,17]
Теперь перебираем список с жадным суммированием в обратном порядке, но пропускаем те элементы, чья нечетная / четная сумма меньше, чем у ближайших крассматриваемый элемент.
src = [1,2,4,1,2,3,5,3,1,2,3,4,5,2]
odd_even_sums = src[:2]
for i in xrange(2,len(src)):
odd_even_sums.append(src[i] + odd_even_sums[i-2])
best = []
for i in xrange(len(src)-1,-1,-1):
if i == 0:
best.append(i)
elif odd_even_sums[i-1] > odd_even_sums[i]:
pass
elif odd_even_sums[i-1] == odd_even_sums[i]:
raise Exception("an exercise for the reader")
else:
best.append(i)
best.reverse()
print "Best:",",".join("%s=%s"%(b,src[b]) for b in best)
print "Scores:",sum(odd_even_sums[b] for b in best)
Выходы:
Best: 0=1,1=2,2=4,4=2,6=5,8=1,10=3,12=5
Scores: 77