Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int calculateSum(vector<int> &v){
- int sum = 0;
- for(int i : v){
- sum += i;
- }
- return sum;
- }
- void kPartitionEqualSum(int index, int k, vector<int> &v, vector<vector<int> > &result){
- if(index >= v.size()){
- // result is storing all the partitions in the form of vector, so each vector is a partition
- if(k == 0){
- int sum = 0;
- bool allEqualSum = true;
- for(int i = 0; i < result.size(); i++){
- int partSum = calculateSum(result[i]);
- if(i == 0){
- sum = partSum;
- }
- else{
- if(sum != partSum){
- allEqualSum = false;
- break;
- }
- }
- }
- if(allEqualSum){
- for(int i = 0; i < result.size(); i++){
- cout << '[';
- for(int j : result[i]){
- cout << j << ",";
- }
- cout << ']';
- }
- cout << '\n';
- }
- }
- return;
- }
- // separate partition
- if(k > 0){
- vector<int> newPartition = {v[index]};
- result.push_back(newPartition);
- kPartitionEqualSum(index + 1, k - 1, v, result);
- result.pop_back();
- }
- // all the previously created partition
- if(result.size() > 0){
- for(int i = 0; i < result.size(); i++){
- result[i].push_back(v[index]);
- kPartitionEqualSum(index + 1, k, v, result);
- result[i].pop_back();
- }
- }
- }
- int main() {
- // your code goes here
- int n, k;
- cin >> n;
- vector<int> v(n);
- for(int i = 0; i < n; i++){
- cin >> v[i];
- }
- cin >> k;
- vector<vector<int> > result;
- kPartitionEqualSum(0, k, v, result);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement