В моем курсе по алгоритмам в книге есть вопрос следующего содержания: «Вам дан массив a[1..n] положительных чисел и целое число k. Вы должны создать массив b[1..n] , так что: для каждого j, b[j] равно 1 или 0. Массив b имеет соседние единицы не более K раз. Сумма (a[j]*b[j]) для 1 ‹= j ‹= n максимальна ." Например, для массива [10, 100, 300, 400, 50, 4500, 200, 30, 90] и k = 2 массив b может быть = [1, 0, 1, 1, 0, 1, 1, 0 , 1], что максимизирует сумму до 5500.
В решении используется динамическое программирование. При обсуждении этого с некоторыми друзьями они сказали, что рекуррентное соотношение имеет форму M (i, j) = max (M (i-2, j) + a [i], M (i-1, j -1) + а[и])
может кто-нибудь объяснить, почему так? или если у них другая форма решения такой задачи. Я нахожу динамическое программирование немного сложным для понимания. Спасибо.