Я искал и читал об алгоритмах для этой проблемы, но они, похоже, не применяются в этом случае или недостаточно ясны.Найти элементы, сумма которых ближе всего к заданному значению
У меня есть List<decimal>
из неподписанных значения, где я пытаюсь найти элемент (ы), который суммы является ближайшей к определенному значению N
Список имеет переменного размера с средним 500 элементов. Производительность НЕ является приоритетом для этого решения.
Внедренный метод должен возвращать одно решение или пустой список, если решение не найдено.
Существующие более одного, выберите один с меньшим количеством элементов.
Example:
N = 15.00
Elements = {
0.10, //EDIT: This shouldn't be here
7.00,
7.00,
14.10,
15.90,
}
Solutions = {
0.10 + 7.00 + 7.00, //EDIT: This shouldn't be here
14.10,
15.90,
}
Final Solution = {14.10} // or 15.90
Этого больше пояснений. Каковы возможные решения для ответа? Любая комбинация любого из чисел в Element? Если это так, ваше окончательное решение не имеет смысла, потому что 14.10 + 0.10 будет 14.20, что ближе к 15, чем 14.10. –
Я уверен, что '{14.10 + 0.10}' лучше, чем ваш предложенный «правильный» ответ. В любом случае динамическое программирование делает это очень эффективно. Обрезанное динамическое программирование, даже moreso. –
Это очень тесно связано с проблемой [Knackack Problem] (http://en.wikipedia.org/wiki/Knapsack_problem#0.2F1_knapsack_problem), и тот же подход будет работать (с небольшой модификацией, чтобы изменить жесткий предел на мягкий предел) –