Maximum size subset with given sum in C++

C++Server Side ProgrammingProgramming

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
raja
Published on 21-Jan-2020 11:28:40
Advertisements