Мой вопрос имеет много общего с этим: Разделите список чисел на n блоков, чтобы они имели (близко к) равные суммы и сохраняли первоначальный порядок
Основное различие заключается в том, что у меня есть немного другая метрика, чтобы определить, какое разделение является «наилучшим», и при этом у меня есть произвольное условие, которое нужно соблюдать.
Каждый элемент в моем списке имеет два компонента.Вес и Объем.Я должен разделить их на n различных подгрупп, при этом суммарные веса каждой подгруппы должны быть как можно ближе.Способ проверить это просто получить разницу между самой тяжелой и самой легкой подгруппой.Чем меньше эта разница, тем лучше.Это означает, что подгруппы [15] [15] [15] [10] стоят в конечном счете столько же, сколько и подгруппы [15] [13] [11] [10].
Тогда это частьЯ не могу понять, как добавить в алгоритмы, предложенные в качестве ответов на связанный вопрос, у меня сложное условие, которое нужно соблюдать.Существует максимальный объем [v] для каждой подгруппы, и ни один из них не может превышать ее.Упомянутое выше не снижает оценку, оно делает недействительным весь ответ.
Как алгоритмы (и фрагменты кода), используемые в качестве ответов на предыдущий, могут быть адаптированы для учета условия громкости и немного отличающихсяметод оценки?
Я ищу код, псевдокод или письменное (подробное) объяснение того, как это можно сделать.Вопрос с тэгом C #, потому что это то, что я использую, но я уверен, что я могу переводить с любого неэзотерического языка, так что не стесняйтесь переходить к тому, что вам нравится, если вы отвечаете с кодом.
Как уже упоминалосьв другом вопросе эта проблема очень сложна, и нахождение лучшего решения может оказаться невозможным за разумное время вычислений, поэтому я ищу ответ, который дает «достаточно хорошее» решение, даже если оно можетне будь лучшим.