# 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[i] = true;
count[i] = 0;
}
for (int i = 1; i <= sum; i++) {
subset[i] = false;
count[i] = -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