# 2021-Divider ###### tags: `Shopee code league` (Debuging) ```cpp= class Solution { public: vector<vector<vector<int>>> allCombinations; vector<vector<int>> eachComb; vector<int> eachSub; int noiseCal(vector<int> vec) { int noise, sum = 0; for (int i = 0; i < vec.size(); i++) { sum += vec[i]; } noise = sum * (vec.size() + 1); return noise; } void split(vector<int> &arr, int K, int index, vector<int> eachSub, vector<vector<int>> &eachComb, vector < vector < vector<int>>> &allCombinations) { if (!eachSub.empty()) { eachComb.push_back(eachSub); } if (K == 1) { vector<int> last; for (int i = index; i < arr.size(); i++) { last.push_back(arr[i]); } if (!last.empty()) { //Backtracking eachComb.push_back(last); allCombinations.push_back(eachComb); eachComb.pop_back(); return; } } eachSub.clear(); for (int i = index; i < arr.size(); i++) { eachSub.push_back(arr[i]); split(arr, K - 1, i + 1, eachSub, eachComb, allCombinations); if (!eachComb.empty()) { eachComb.pop_back(); } } } int divide(vector<int> arr, int K, int index, vector<int> eachSub, vector<vector<int>> eachComb, vector < vector < vector<int>>> allCombinations) { int groupSum = 0; int min = INT_MAX; split(arr, K, index, eachSub, eachComb, allCombinations); printf("Groups = ", allCombinations); for (int j = 0; j < allCombinations.size(); j++) { for (int s = 0; s < allCombinations[j].size(); s++) { groupSum += noiseCal(allCombinations[j][s]); } if (groupSum < min) { min = groupSum; } groupSum = 0; } return min; } }; int main() { vector<int> arr = { 1,2,3,4,5,6 }; vector<vector<vector<int>>> allCombinations; vector<vector<int>> eachComb; vector<int> eachSub; int K = 3; int index = 0; int minimum = 0; Solution s; minimum = s.divide(arr, K, index, eachSub, eachComb, allCombinations); printf("Minimum = ", minimum); } ```