Измененная версия вопроса "При наличии массива натуральных чисел, какой самый эффективный алгоритм для поиска непоследовательных элементов из этого массива, которые при сложении вместе дают максимальную сумму?" На стандартную версию ответили неплохо здесь .
Но что, если вы также можете выбрать указанное количество элементов из в любом месте в списке, независимо от того, последовательные они или нет? Как бы вы нашли максимальную сумму в этом случае?
Чтобы прояснить пример, скажем, вы строите дома. У вас есть n участков на выбор. С каждым лотом связана финансовая стоимость, X [i], которую вы получите, если построите там дом. Но из-за законов о зонировании вы не можете строить на последовательных лотах (поэтому, если вы строите на лотах № 5, вы не можете строить на № 4 или № 6). Вы хотите строить дома таким образом, чтобы максимизировать стоимость. Так что, если H [] - это список домов, которые вы должны построить, проблема будет H[i] = max ((H(i-1), H(i-2) + X[i])).
Но что теперь, если у вас есть дополнительные разрешения на k-зонирование (где вам дается k), которые позволяют вам строить где угодно, в дополнение к фиксированным лотам?