Subset array sum by generating all the subsets

04 Feb, 2022
Given an array of size N and a sum, the task is to check whether some array elements can be added to sum to N . Note: At least one element should be included to form the sum.(i.e. sum cant be zero) Examples:  
Input: array = -1, 2, 4, 121, N = 5
Output: YES
The array elements 2, 4, -1 can be added to sum to N

Input: array = 1, 3, 7, 121, N = 5
Output:NO 
 
Approach: The idea is to generate all subsets using Generate all subsequences of array and correspondingly check if any subsequence has the sum equal to the given sum.Below is the implementation of the above approach:  
CPP
Java
Python3
C#
PHP
Javascript
// C++ implementation of the above approach#include <bits/stdc++.h>using namespace std; // Find way to sum to N using array elements atmost oncevoid find(int arr[], int length, int s){    // loop for all 2^n combinations    for (int i = 1; i < (pow(2, length)); i++) {         // sum of a combination        int sum = 0;         for (int j = 0; j < length; j++)             // if the bit is 1 then add the element            if (((i >> j) & 1))                sum += arr[j];         // if the sum is equal to given sum print yes        if (sum == s) {            cout << "YES" << endl;            return;        }    }     // else print no    cout << "NO" << endl;} // driver codeint main(){    int sum = 5;    int array[] = { -1, 2, 4, 121 };    int length = sizeof(array) / sizeof(int);     // find whether it is possible to sum to n    find(array, length, sum);     return 0;}
// Java implementation of the above approachclass GFG{             // Find way to sum to N using array elements atmost once        static void find(int [] arr, int length, int s)        {            // loop for all 2^n combinations            for (int i = 1; i <= (Math.pow(2, length)); i++) {                         // sum of a combination                int sum = 0;                         for (int j = 0; j < length; j++)                             // if the bit is 1 then add the element                    if (((i >> j) & 1) % 2 == 1)                        sum += arr[j];                         // if the sum is equal to given sum print yes                if (sum == s) {                    System.out.println("YES");                    return;                }            }                     // else print no            System.out.println("NO");        }                 // driver code        public static void main(String[] args)        {            int sum = 5;            int []array = { -1, 2, 4, 121 };            int length = array.length;                     // find whether it is possible to sum to n            find(array, length, sum);                 } } // This code is contributed by ihritik
# Python3 implementationfrom itertools import combinations def find(lst, n):    print('YES' if [1 for r in range(1, len(lst) + 1)                      for subset in combinations(lst, r)                      if sum(subset) ==   n] else 'NO') find([-1, 2, 4, 121], 5) #This code is contributed by signi dimitri
     // C# implementation of the above approachusing System;public class GFG{              // Find way to sum to N using array elements atmost once        static void find(int [] arr, int length, int s)        {            // loop for all 2^n combinations            for (int i = 1; i <= (Math.Pow(2, length)); i++) {                          // sum of a combination                int sum = 0;                          for (int j = 0; j < length; j++)                              // if the bit is 1 then add the element                    if (((i >> j) & 1) % 2 == 1)                        sum += arr[j];                          // if the sum is equal to given sum print yes                if (sum == s) {                    Console.Write("YES");                    return;                }            }                      // else print no            Console.Write("NO");        }                  // driver code        public static void Main()        {            int sum = 5;            int []array = { -1, 2, 4, 121 };            int length = array.Length;                      // find whether it is possible to sum to n            find(array, length, sum);                  }  } // This code is contributed by PrinciRaj19992
<?php// PHP implementation of the above approach // Find way to sum to N using array elements atmost once function find($arr, $length, $s){    // loop for all 2^n combinations    for ( $i = 1; $i < (pow(2, $length)); $i++)    {         // sum of a combination        $sum = 0;         for ($j = 0; $j < $length; $j++)             // if the bit is 1 then add the element            if ((($i >> $j) & 1))                $sum += $arr[$j];         // if the sum is equal to given sum print yes        if ($sum == $s)        {            echo "YES","\n";            return;        }    }     // else print no    echo "NO","\n";}     // Driver code    $sum = 5;    $array = array(-1, 2, 4, 121 );    $length = sizeof($array) / sizeof($array[0]);     // find whether it is possible to sum to n    find($array, $length, $sum);  // This code is contributed by ajit.?>
<script> // Javascript implementation of the above approach // Find way to sum to N using array// elements atmost oncefunction find(arr, length, s){    // loop for all 2^n combinations    for (var i = 1; i < (Math.pow(2, length)); i++)    {         // sum of a combination        var sum = 0;         for (var j = 0; j < length; j++)             // if the bit is 1 then add the element            if (((i >> j) & 1))                sum += arr[j];         // if the sum is equal to given sum print yes        if (sum == s) {            document.write( "YES" + "<br>");            return;        }    }     // else print no    document.write( "NO" + "<br>");}  var sum = 5;var array = [ -1, 2, 4, 121 ];var length = array.length; // find whether it is possible to sum to nfind(array, length, sum); // This code is contributed by SoumikMondal </script>
YES
 
Note: This program would not run for the large size of the array. 
ihritik
signidimitri
princiraj1992
akashaditya00
jit_t
SoumikMondal
sumitgumber28
subsequence
subset
Bit Magic
Competitive Programming
Bit Magic
subset
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to find whether a given number is power of 2
Little and Big Endian Mystery
Bits manipulation (Important tactics)
Binary representation of a given number
Josephus problem | Set 1 (A O(n) Solution)
Competitive Programming - A Complete Guide
Practice for cracking any coding interview
Arrow operator -> in C/C++ with Examples
Modulo 10^9+7 (1000000007)
Prefix Sum Array - Implementation and Applications in Competitive Programming