36 Support(
int n,
int m) : initial_n(n), initial_m(m)
38 std::cout << n <<
" " << m << std::endl;
52 template <
class UnaryOperation>
void generate(UnaryOperation op)
const
54 std::vector<int> M_j(this->initial_n + 1);
55 f(this->initial_n, this->initial_m, this->initial_n, M_j, op);
69 template <
class Callback>
void f(
int n,
int m,
int j_max, std::vector<int> &v, Callback callback)
const
83 callback(OccupancySpectrum(std::move(copy), this->initial_n, this->initial_m));
91 for (
int i = n / j_max; i >= 1; --i)
97 int balls_left = n - i * j_max;
98 if (balls_left < j_max)
100 f(balls_left, m - i, balls_left, copy, callback);
104 f(balls_left, m - i, j_max - 1, copy, callback);
112 if (j_max == 0 && n > 0)
119 f(n, m, j_max - 1, copy, callback);