Учитывая массив положительных целых чисел, какой алгоритм является наиболее эффективным для поиска непоследовательных элементов из этого массива, которые при сложении дают максимальную сумму?
Динамика * Решение для программирования 1021 * - использовать вспомогательный массив maxSum
, содержащий максимальную сумму до этого конкретного индекса. Мы начинаем с установки первых двух индексов массива и заполняем остальную часть массива max(array[i]+maxSum[i-2], maxSum[i-1])
.
Я понимаю, что мы не можем добавлять соседние элементы, но я изо всех сил пытаюсь понять, как приведенное выше решение учитывает, что предыдущий элемент в maxSum[i]
может не быть результатом суммирования с array[i]
.
Например:
index: 0 1 2 3 4
array: 3 5 -7 8 10
maxSum: 3 5 5 _
Мы видим, что maxSum [2] не является результатом суммирования с массивом [2].
Чтобы найти maxSum[3] = max(array[3]+maxSum[1], maxSum[2])
, но почему бы нам не рассмотреть maxSum[2] + array[3]
? Поскольку maxSum [2] может не состоять из соседнего значения массива [2].