#include #include //#pragma GCC optimize ("O3") std::vector>> subsets; // Source of this function: https://slaystudy.com/find-all-subsets-of-an-array-c/ void PrintAllSubsets(std::vector arr, int i, int n, std::vector subset, int j) { if (i == n) { subsets[subset.size()].push_back(subset); return; } PrintAllSubsets(arr, i + 1, n, subset, j); subset.resize(j + 1); subset[j] = arr[i]; PrintAllSubsets(arr, i + 1, n, subset, j + 1); } int main() { int n, k, sum = 0, num = 0; bool me = false; std::vectordupl(400, 0); std::cin >> n >> k; subsets.resize(k + 2); std::vector items, index, subset; items.resize(k); index.resize(k); for (int i = 0; i < k; i++) { std::cin >> items[i]; dupl[items[i]]++; index[i] = i; } PrintAllSubsets(index, 0, n, subset, 0); for (int i = 0; i < k; i++) { for (int j = 0; j < k - 1; j++) { for (int x = 0; x < (int)(subsets[j + 1].size()); x++) { me = false; sum = 0; for (int y = 0; y < (int)(subsets[j + 1][x].size()); y++) { if (subsets[j + 1][x][y] == i) { me = true; } sum += items[subsets[j + 1][x][y]]; } if (me) { continue; } if ((sum <= n) && (sum + items[i] > n)) { num++; } } std::cout << num; if (j != k - 2) { std::cout << " "; } num = 0; } if (i != k - 1) { std::cout << std::endl; } } return 0; }