Advertisement
Fastrail08

K equal partition (INCOMPLETE)

Jul 3rd, 2025
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. /*
  5.  
  6. VERY IMPORTANT LINK -
  7. https://chatgpt.com/canvas/shared/68631cabdd608191b64d447a63a1ea45
  8. (DP + BITMASK INTUITION discussion PDF)
  9.  
  10. */
  11.  
  12.  
  13. int getKEqualPartition(int mask, int currSum, int &targetSum, int lastIndex, int k, vector<int> &v){
  14.    
  15.     //take elements only if not used
  16.     //start from lastIndex + 1 to generate combinations
  17.     /// need to check if group completed or not
  18.     for(int i = lastIndex + 1; i < v.size(); i++){
  19.         //ensures that the current element was not used and adding it will not exceed limit of each group
  20.         if(mask & (1 << i) == 0 && currSum + v[i] <= targetSum){
  21.             //mark as used by setting the ith bit ON in newMask
  22.             int newMask = mask | (1 << i);
  23.             getKEqualPartition(newMask, currSum + v[i], targetSum, i, k, v);
  24.         }
  25.     }
  26. }
  27.  
  28.  
  29. int main() {
  30.     // your code goes here
  31.     int n, k;
  32.     vector<int> v(n);
  33.     for(int i = 0; i < n; i++){
  34.         cin >> v[i];
  35.     }
  36.     cin >> k;
  37.     int mask = 0;
  38.     for(int i = 0; i < v.size(); i++){
  39.         sum += v[i];
  40.     }
  41.     // as all the elements can't be partitioned into k parts anyways
  42.     if(sum % k != 0){
  43.         return 0;
  44.     }
  45.     //if sum can be partitioned into k parts, then each part should sum exactly to sum / k because we want every partition to be of equal sum
  46.     else{
  47.         sum /= k;        
  48.     }
  49.     getKEqualPartition(mask, 0, sum, -1, k, v);
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement