# Python Program for Subset Sum Problem | DP-25

Given a set of non-negative integers, and a value sum, determine if there is a subset of the given set with sum equal to given sum.
Example:

```Input:  set[] = {3, 34, 4, 12, 5, 2}, sum = 9
Output:  True  //There is a subset (4, 5) with sum 9.
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Following is naive recursive implementation that simply follows the recursive structure mentioned above.

## Python3

 `# A recursive solution for subset sum ` `# problem ` ` `  `# Returns true if there is a subset  ` `# of set[] with sun equal to given sum ` `def` `isSubsetSum(``set``, n, ``sum``) : ` `   `  `    ``# Base Cases ` `    ``if` `(``sum` `=``=` `0``) : ` `        ``return` `True` `    ``if` `(n ``=``=` `0` `and` `sum` `!``=` `0``) : ` `        ``return` `False` `  `  `    ``# If last element is greater than ` `    ``# sum, then ignore it ` `    ``if` `(``set``[n ``-` `1``] > ``sum``) : ` `        ``return` `isSubsetSum(``set``, n ``-` `1``, ``sum``); ` `  `  `    ``# 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``) ``or` `isSubsetSum(``set``, n``-``1``, ``sum``-``set``[n``-``1``]) ` `     `  `     `  `# Driver program to test above function ` `set` `=` `[``3``, ``34``, ``4``, ``12``, ``5``, ``2``] ` `sum` `=` `9` `n ``=` `len``(``set``) ` `if` `(isSubsetSum(``set``, n, ``sum``) ``=``=` `True``) : ` `    ``print``(``"Found a subset with given sum"``) ` `else` `: ` `    ``print``(``"No subset with given sum"``) ` `     `  `# This code is contributed by Nikita Tiwari. `

Output:

```Found a subset with given sum
```

We can solve the problem in Pseudo-polynomial time using Dynamic programming.

## Python3

 `# A Dynamic Programming solution for subset sum problem ` `# Returns true if there is a subset of  ` `# set[] with sun equal to given sum  ` ` `  `# Returns true if there is a subset of set[]  ` `# with sun equal to given sum ` `def` `isSubsetSum(``set``, n, ``sum``): ` `     `  `    ``# The value of subset[i][j] will be  ` `    ``# true if there is a ` `    ``# subset of set[0..j-1] with sum equal to i ` `    ``subset ``=``([[``False` `for` `i ``in` `range``(``sum` `+` `1``)]  ` `            ``for` `i ``in` `range``(n ``+` `1``)]) ` `     `  `    ``# If sum is 0, then answer is true  ` `    ``for` `i ``in` `range``(n ``+` `1``): ` `        ``subset[i][``0``] ``=` `True` `         `  `        ``# If sum is not 0 and set is empty,  ` `        ``# then answer is false  ` `        ``for` `i ``in` `range``(``1``, ``sum` `+` `1``): ` `            ``subset[``0``][i]``=` `False` `             `  `        ``# Fill the subset table in botton up manner ` `        ``for` `i ``in` `range``(``1``, n ``+` `1``): ` `            ``for` `j ``in` `range``(``1``, ``sum` `+` `1``): ` `                ``if` `j<``set``[i``-``1``]: ` `                    ``subset[i][j] ``=` `subset[i``-``1``][j] ` `                ``if` `j>``=` `set``[i``-``1``]: ` `                    ``subset[i][j] ``=` `(subset[i``-``1``][j] ``or`  `                                   ``subset[i ``-` `1``][j``-``set``[i``-``1``]]) ` `     `  `        ``# uncomment this code to print table  ` `        ``# for i in range(n + 1): ` `        ``# for j in range(sum + 1): ` `        ``# print (subset[i][j], end =" ") ` `        ``# print() ` `    ``return` `subset[n][``sum``] ` `         `  `# Driver program to test above function ` `if` `__name__``=``=``'__main__'``: ` `    ``set` `=` `[``3``, ``34``, ``4``, ``12``, ``5``, ``2``] ` `    ``sum` `=` `9` `    ``n ``=` `len``(``set``) ` `    ``if` `(isSubsetSum(``set``, n, ``sum``) ``=``=` `True``): ` `        ``print``(``"Found a subset with given sum"``) ` `    ``else``: ` `        ``print``(``"No subset with given sum"``) ` `         `  `# This code is contributed by  ` `# sahil shelangia.  `

Output:

```Found a subset with given sum
```

Please refer complete article on Subset Sum Problem | DP-25 for more details!

My Personal Notes arrow_drop_up
Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.