#include <stdio.h>
// Returns true if there is a subset of set[] with sun equal to given sum
bool isSubsetSum(int set[], int n, int sum)
{
// Base Cases
if (sum == 0)
return true;
if(sum<0)
return 0;
if (n == 0 && sum != 0)
return false;
/* else, check if sum can be obtained by any of the following
(a) including the last element
(b) excluding the last element */
return isSubsetSum(set, n-1, sum) || isSubsetSum(set, n-1, sum-set[n-1]);
}
// Driver program to test above function
int main()
{
int set[] = {3, 34, 4, 12, 15, 2};
int sum = 8;
int n = sizeof(set)/sizeof(set[0]);
if (isSubsetSum(set, n, sum) == true)
printf("Found a subset with given sum");
else
printf("No subset with given sum");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgc3Vic2V0IG9mIHNldFtdIHdpdGggc3VuIGVxdWFsIHRvIGdpdmVuIHN1bQpib29sIGlzU3Vic2V0U3VtKGludCBzZXRbXSwgaW50IG4sIGludCBzdW0pCnsKICAgLy8gQmFzZSBDYXNlcwogICBpZiAoc3VtID09IDApCiAgICAgcmV0dXJuIHRydWU7CiAgIGlmKHN1bTwwKQogICByZXR1cm4gMDsKICAgaWYgKG4gPT0gMCAmJiBzdW0gIT0gMCkKICAgICByZXR1cm4gZmFsc2U7CgogICAvKiBlbHNlLCBjaGVjayBpZiBzdW0gY2FuIGJlIG9idGFpbmVkIGJ5IGFueSBvZiB0aGUgZm9sbG93aW5nCiAgICAgIChhKSBpbmNsdWRpbmcgdGhlIGxhc3QgZWxlbWVudAogICAgICAoYikgZXhjbHVkaW5nIHRoZSBsYXN0IGVsZW1lbnQgICAqLwogICByZXR1cm4gaXNTdWJzZXRTdW0oc2V0LCBuLTEsIHN1bSkgfHwgaXNTdWJzZXRTdW0oc2V0LCBuLTEsIHN1bS1zZXRbbi0xXSk7Cn0KIAovLyBEcml2ZXIgcHJvZ3JhbSB0byB0ZXN0IGFib3ZlIGZ1bmN0aW9uCmludCBtYWluKCkKewogIGludCBzZXRbXSA9IHszLCAzNCwgNCwgMTIsIDE1LCAyfTsKICBpbnQgc3VtID0gODsKICBpbnQgbiA9IHNpemVvZihzZXQpL3NpemVvZihzZXRbMF0pOwogIGlmIChpc1N1YnNldFN1bShzZXQsIG4sIHN1bSkgPT0gdHJ1ZSkKICAgICBwcmludGYoIkZvdW5kIGEgc3Vic2V0IHdpdGggZ2l2ZW4gc3VtIik7CiAgZWxzZQogICAgIHByaW50ZigiTm8gc3Vic2V0IHdpdGggZ2l2ZW4gc3VtIik7CiAgcmV0dXJuIDA7Cn0=