AlgoPlus v0.1.0
Loading...
Searching...
No Matches
partitions.h
1#ifndef PARTITIONS_H
2#define PARTITIONS_H
3
4#ifdef __cplusplus
5#include <iostream>
6#include <vector>
7#endif
8
9void iterate(long long n, std::vector<std::vector<long long>>& ans,
10 std::vector<long long> prefix = {}) {
11 if (n == 0) {
12 ans.push_back(prefix);
13 } else {
14 long long max = prefix.size() ? std::min(prefix.back(), n) : n;
15 prefix.push_back(1);
16
17 for (long long i = 1; i <= max; i++) {
18 prefix.back() = i;
19 iterate(n - i, ans, prefix);
20 }
21 }
22}
23
24std::vector<std::vector<long long>> partitions(long long n) {
25 std::vector<std::vector<long long>> ans;
26 iterate(n, ans);
27 return ans;
28}
29
30#endif