#include #include 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++) { //prechadzam pole for (int j = 0; j < k - 1; j++) { // pocet veci v sklade for (int x = 0; x < subsets[j + 1].size(); x++) { // vsetky j-tice // me = 0; // vyskyt v j-tici me = false; sum = 0; for (int y = 0; y < subsets[j + 1][x].size(); y++) { // prechod cez j-ticu 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; }