← Все вопросы

Stars and bars: сколько неотрицательных решений у x1+x2+...+xk = n?

Задан 6 месяцев назад1.4к просмотров2 ответа
8

В задаче надо посчитать, сколькими способами разложить n одинаковых предметов по k различным ящикам (ящики могут быть пустыми). Это же уравнение x1+...+xk = n в неотрицательных целых. Какая тут формула и как её обосновать? И что меняется, если каждый ящик должен быть непустым?

2 ответа

13
✓ Принятый ответ — помог автору

Это «звёзды и палочки» (stars and bars). Представь n звёздочек в ряд и (k−1) палочек-перегородок, которые делят их на k групп. Любая расстановка перегородок ↔ одно решение. Всего объектов n + (k−1), выбираем, где стоят k−1 палочек:

Число неотрицательных решений = C(n + k − 1, k − 1) = C(n + k − 1, n).

Если каждый x_i ≥ 1 (ящики непусты), подставь x_i = y_i + 1, y_i ≥ 0: уравнение становится y_1+...+y_k = n − k, откуда ответ = C(n − 1, k − 1) (при n ≥ k, иначе 0).

// неотрицательные решения x1+...+xk = n
long long starsBars(int n, int k) {        // C(n+k-1, k-1)
    return C(n + k - 1, k - 1);            // C — через факториалы mod p
}
// положительные решения
long long starsBarsPositive(int n, int k) {
    if (n < k) return 0;
    return C(n - 1, k - 1);
}

Сложность — O(1) после предподсчёта факториалов. Обобщения с верхними границами на x_i решаются добавлением включения-исключения по «превышениям».

5

Частая ошибка — путать различимые предметы с одинаковыми. Stars and bars — про ОДИНАКОВЫЕ предметы в РАЗЛИЧНЫЕ ящики. Если предметы различимы, ответ — k^n (каждый предмет независимо в любой из k ящиков). А если и предметы, и ящики одинаковы, это уже разбиения числа n на ≤ k частей — там простой формулы нет, считают ДП.

Ваш ответ

Войдите, чтобы ответить на вопрос.