Каждая комбинация представляет собой набор из 1..n элементов. (элементы не должны повторяться), определенные заранее.
Например,
Список элементов (содержит количество доступных частей):
Элемент
Количество
A
2
B
3
C
2
< tr>
D
4
E< /td>
2
F
3
Список разрешенных комбинаций (одно появление элемента означает требуется 1 часть этого элемента):
Комбинация
Элементы
C1
A, C, D
C2
C, D, F
C3
E, A
C4
A, F, C
Из выше, я могу выбрать {C1, C4} или {C1, C2, C3}.
И теперь, имея список комбинаций, я хотел бы оптимизировать, какие комбинации выбрать, чтобы используйте их как можно больше (уникальных!), имеющих только элементы из списка и только в таком количестве, т.е. выбирайте {C1, C4} вместо {C1, C2, C3}.
Я попробовал «жадный» алгоритм, т. е. проверку комбинаций одну за другой, пока не было достаточного количества элементов, но результаты оказались далеки от идеальных. ChatGPT тоже не помог.
Поможет ли кто-нибудь куском кода (Java или любого другого языка) или хотя бы названием алгоритма, чтобы я мог смотреть дальше (полагаю что такая проблема уже названа

Подробнее здесь: https://stackoverflow.com/questions/783 ... mbinations