Похоже, вы хотите знать, сколько подмножественных множеств имеет, скажем, 3 элемента. Математика для этого становится очень сложной, очень быстро. Идея заключается в том, что вы хотите сложить все комбинации способов добраться туда. Таким образом, у вас есть C (3,4) = 4 способа сделать это без дублированных элементов. B можно повторить дважды в C (1,3) = 3 способа. B можно повторить 3 раза в 1 способ. И С можно повторить дважды С (1,3) = 3 способами. Всего 11. (Ваша 10, которую вы получили вручную, была неправильной. Извините.)
В общем, пытаться сделать эту логику слишком сложно. Более простой способ отследить это - выписать многочлен, коэффициенты которого имеют нужные вам термины, которые вы умножаете. Для треугольника Паскаля это легко, многочлен имеет вид (1 + x) ^ n. (Вы можете использовать повторное возведение в квадрат, чтобы вычислить это более эффективно.) В вашем случае, если элемент повторяется дважды, у вас будет коэффициент (1 + x + x ^ 2). 3 раза будет (1 + х + х ^ 2 + х ^ 3). Таким образом, ваша конкретная проблема будет решена следующим образом:
(1 + x) (1 + x + x^2 + x^3) (1 + x + x^2) (1 + x)
= (1 + 2x + 2x^2 + 2x^3 + x^4)(1 + 2x + 2x^2 + x^3)
= 1 + 2x + 2x^2 + x^3 +
2x + 4x^2 + 4x^3 + 2x^4 +
2x^2 + 4x^3 + 4x^4 + 2x^5 +
2x^3 + 4x^4 + 4x^5 + 2x^6 +
x^4 + 2x^5 + 2x^6 + x^7
= 1 + 4x + 8x^2 + 11x^3 + 11x^4 + 8x^5 + 4x^6 + x^7
Если вы хотите создать эти числа в коде, я бы использовал полиномиальный трюк для организации вашего мышления и кода. (Вы будете работать с массивами коэффициентов.)