Покрытие множества. Или как из списка объектов выбрать оптимальный набор комплектов. [C#]

Здравствуйте.

Есть

список объектов

имеющих стоимость. Объекты различаются по

типу

.

Есть

комплекты

, представляют собой набор

типов

. Комплект так же имеет стоимость.

Комплекты и список объектов могут иметь несколько объектов одного типа.

Вопрос каким образом можно выбрать оптимальные(дешёвые) комплекты, по возможности быстро?

Комплекты уже имеются

заранее, нужно выбрать из них.

простой пример:

Список объектов: 6 лыж,6 палок,3 шлема, 1 очки, 1 пояс супер силы.

Покрытие: (лыжи/палки/шлем/очки)х1 / (лыжи/палки/шлем)х3 / пояс супер силы*

*пояс супер силы не присутствует не в одном комплекте

Если в итоге получится несколько покрытий, то сравнить их стоимость не проблема.

Реализовывать алгоритм буду на C#.

Спасибо за внимание, на самом деле не знаю даже от куда подступится.