Это касается конкретного вопроса/проблемы DP, который я получил некоторое время назад, когда меня брали интервью для программы интернатуры SE. Тогда я не мог найти правильное решение, и с тех пор это меня раздражало. Серебряная подкладка - это то, что я понял, что мне нужно работать над методами DP.DP - Поиск максимальной суммы массива с определенным набором правил
Итак, вопрос звучит так: -
Учитывая массив n
(т.е. [1, 5, 0]
и набор узлов с размером n + 1
(в данном случае, будет 4
узлов), эти узлы нужно быть . устроено таким образом, чтобы найти максимальное значение, которое можно извлечь из этого расположения узлов данных критериев заключаются в следующих: -
- Каждая позиция/индекс в массиве представляет, сколько из других узлов что текущий узел может быть подключен, т. е. первый индекс будет означать, что узел i s подключен к одному другому узлу, второй означает, что узел соединен с двумя другими узлами и так далее и так далее.
- Каждое значение в массиве представляет собой коэффициент усиления, который вы можете извлечь, если узел подключен к одному, двум, трех, ..., (n - 1) другим узлам. Итак, если узел подключен к другому узлу, извлеченное значение (в данном случае) будет равно 1 (согласно указанному выше массиву).
- Расположение этих узлов не может быть круговым. то есть
X1 -- X2 -- X3 -- X4
является приемлемым.
Я думаю, несколько примеров поможет в получении более полное представление о предметной области: -
Вход: [1, 5, 0]
| Ожидаемый результат: 12
| Ожидаемое расположение узлов: X -- X -- X -- X
Пояснение: - всего 4 узла, вход указывает, что узел даст 1 единицу значения/коэффициента усиления, если он подключен точно к одному другому узлу, 5 единиц, если он напрямую связан с 2 других узла и вообще нет значения/коэффициента усиления, если он напрямую связан с тремя другими узлами. В оптимальной настройке (показано выше) первый и последний узлы получают по 1 единице каждый (каждый из них связан с одним другим узлом), тогда как два узла в середине последовательности дают по 5 единиц узлов. Таким образом, максимальный объем собираемой стоимости/коэффициента усиления составляет 1 + 5 + 5 + 1 = 12.
[0, 0, 0, 0, 50]
| Ожидаемый результат: 50
| Ожидаемое расположение узлов: * Подумайте о форме STAR с (n+1)
-м узлом в середине, так как коэффициент усиления равен 50, если узел подключен к 5 другим узлам.
[1, 2, 3, 4, 5, 6]
| Ожидаемый результат: 12
[3, 9, 6, 15, 9, 21, 15]
| Ожидаемый результат: 60
Не стесняйтесь задавать вопросы, если вы действительно не понимаете данную проблему/приведенные примеры, и я попытаюсь изо всех сил прояснить их.
Как я уже сказал, я посреди улучшения себя с проблемами, связанными с DP. Поэтому я не ожидаю, что здесь будет дано полное решение. Я прошу только подсказки/подсказки/отправную точку, с которой я могу работать/с. Алгоритм для обзора тоже будет достаточным!
В принципе, любая помощь будет принята с благодарностью. Заранее спасибо!:)
Привет! Во-первых, спасибо за помощь. У меня есть несколько вопросов, поскольку я до сих пор не полностью понимаю концепцию. Не могли бы вы объяснить, что вы имели в виду, когда сказали: «Однако, поскольку нам нужны только комбинации, [1, 2, 2, 3, 1, 1] совпадает с [1, 2, 3, 1, 2, 1]. Теперь мы можем отказаться от повторяющихся элементов и создать следующие комбинации "? Кроме того, если вы не можете спросить, не могли бы вы объяснить свой код? Возможно, я все еще не понял все, чтобы понять код реализации. Приносим извинения за неудобства. – cottonman
Привет @cottonman, я отредактировал свой ответ и код, взгляните на них, и если это неясно, дайте мне знать. Однако обратите внимание, что число разделов p (n) растет экспоненциально, поэтому все, что вы делаете для создания всех разделов, обязательно должно занимать экспоненциальное время. –
Hi Rad. Извините за задержку с ответом. Я попытаюсь обработать все и вернуться к вам, если у меня появятся дальнейшие запросы. Еще раз спасибо! :) – cottonman