Maximum size subset with given sum in C++


Problem statement

Given an array of N elements and sum. We need to find size of maximum size subset whose sum is equal to given sum

Example

If input array is arr = { 2, 3, 5, 10 } and sum = 20 then output will be 4 as −

2 + 3 + 5 + 10 = 20 which is equal to given sum

Algorithm

We can use dynamic programming to solve this problem.

To count the maximal subset, we use another DP array (called as ‘count array’) where count[i][j] is maximal of.

  • count[i][j-1]. Here current element is not considered.
  • scount[i- X][j-1] + 1. Here X is value of the current element selected for subset.

Example

 Live Demo

#include<bits/stdc++.h>
using namespace std;
int isSubsetSum(int set[], int n, int sum) {
   bool subset[sum + 1][n + 1];
   int count[sum + 1][n + 1];
   for (int i = 0; i <= n; i++) {
   subset[0][i] = true;
      count[0][i] = 0;
   }
   for (int i = 1; i <= sum; i++) {
      subset[i][0] = false;
      count[i][0] = -1;
   }
   for (int i = 1; i <= sum; i++) {
      for (int j = 1; j <= n; j++) {
         subset[i][j] = subset[i][j - 1];
         count[i][j] = count[i][j - 1];
         if (i >= set[j - 1]) {
            subset[i][j] = subset[i][j] || subset[i - set[j - 1]][j - 1];
            if (subset[i][j]) {
               count[i][j] = max(count[i][j - 1], count[i - set[j - 1]][j - 1] + 1);
            }
         }
      }
  }
  return count[sum][n];
}
int main() {
   int set[] = { 2, 3, 5, 10 };
   int sum = 20;
   int n = 4;
   cout<< "Result = " << isSubsetSum(set, n, sum) << endl;
}

Output

When you compile and execute above program. It generates following output −

Result = 4

Updated on: 21-Jan-2020

579 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements