У меня типичный вопрос в динамическом программировании.Динамическое программирование с наборами
Мой вопрос задан для массива = {1,2,3,4,5,6}, я должен найти все массивы, сумма которых является самой большой k. Если я рассмотрю все множества, он станет экспоненциальным alogorthm. Я думал об этом благодаря Dynamic Programming.
Suppose f k =7,
My idea is
Pass 1: {1],{2}....{6}
Pass 2: Pass1 + {1,2},{1,3},{1,4},{1,5}
Pass 3: Pass2 + {1,2,3},
И мое слово останавливается.
Im не в состоянии сформулировать это с помощью динамического программирования. Любые входы? Как сформулировать этот алгоритм в программу?
DP обычно используется, если существует такое подмножество или найти число таких подмножеств. Обратите внимание, что DP все еще будет экспоненциальным, если вы хотите, чтобы все сами наборы, потому что это может быть экспоненциальное число. – amit
Каждый алгоритм для этой задачи обязательно является экспоненциальным в худшем случае, поскольку в решении может быть экспоненциально множество множеств (пусть k = sum (array), то вам нужно вернуть все 2^n подмножества). Может быть, вы хотите только подсчитать количество таких наборов? –