Given a set of unique positive integers (size ranging upto 32), it is required to determine whether a required sum is possible or not.
A brute force approach is:
bool isPossible(long long int n, int s)
{
if(n<0)
return false;
if(n == 0)
return true;
for(int i=s;i<32;++i)
if(isPossible(n-allNumbers[i], i+1))
return true;
return false;
}
isPossible(n,0) returns the boolean value corresponding to whether the number n is possible to be expressed as sum of unique numbers from the set allNumbers[]. But the complexity of this solution is O(2^32). Is it possible to get a better run time for this problem?