Подсчет подмножеств с заданными размерами набора

Дан набор C с n элементами (разрешены дубликаты) и раздел P из n
P = {i1, i2, ... / i1 + i2 + ... = n} сколько существует различных разложений C на подмножества размера i1, i2, ...?

Пример:

C = {2 2 2 3}

P = {2 2}
C = {2 2} U {2 3}

P = {1 1 2}
C = {2} U {2} U {2 3}
C = {2} U {3} U {2 2}

P = {1 3}
C = {2} U {2 2 3}
C = {3} U {2 2 2}

У меня есть решение, но оно неэффективно, когда C имеет более десятка элементов.
Заранее спасибо
Philippe

10
задан PhilippeC 8 May 2011 в 17:26
поделиться