# Java 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.

## Java

 `// A recursive solution for subset sum ` `// problem ` `class` `GFG { ` ` `  `    ``// Returns true if there is a subset ` `    ``// of set[] with sum equal to given sum ` `    ``static` `boolean` `isSubsetSum(``int` `set[], ` `                               ``int` `n, ``int` `sum) ` `    ``{ ` `        ``// Base Cases ` `        ``if` `(sum == ``0``) ` `            ``return` `true``; ` `        ``if` `(n == ``0` `&& 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) || isSubsetSum(set, n - ``1``, sum - set[n - ``1``]); ` `    ``} ` ` `  `    ``/* Driver program to test above function */` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``int` `set[] = { ``3``, ``34``, ``4``, ``12``, ``5``, ``2` `}; ` `        ``int` `sum = ``9``; ` `        ``int` `n = set.length; ` `        ``if` `(isSubsetSum(set, n, sum) == ``true``) ` `            ``System.out.println(``"Found a subset"` `                               ``+ ``" with given sum"``); ` `        ``else` `            ``System.out.println(``"No subset with"` `                               ``+ ``" given sum"``); ` `    ``} ` `} ` ` `  `/* This code is contributed by Rajat Mishra */`

Output:

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

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

## Java

 `// A Dynamic Programming solution for subset ` `// sum problem ` `class` `GFG { ` ` `  `    ``// Returns true if there is a subset of ` `    ``// set[] with sun equal to given sum ` `    ``static` `boolean` `isSubsetSum(``int` `set[], ` `                               ``int` `n, ``int` `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 ` `        ``boolean` `subset[][] = ``new` `boolean``[sum + ``1``][n + ``1``]; ` ` `  `        ``// If sum is 0, then answer is true ` `        ``for` `(``int` `i = ``0``; i <= n; i++) ` `            ``subset[``0``][i] = ``true``; ` ` `  `        ``// If sum is not 0 and set is empty, ` `        ``// then answer is false ` `        ``for` `(``int` `i = ``1``; i <= sum; i++) ` `            ``subset[i][``0``] = ``false``; ` ` `  `        ``// Fill the subset table in botton ` `        ``// up manner ` `        ``for` `(``int` `i = ``1``; i <= sum; i++) { ` `            ``for` `(``int` `j = ``1``; j <= n; j++) { ` `                ``subset[i][j] = subset[i][j - ``1``]; ` `                ``if` `(i >= set[j - ``1``]) ` `                    ``subset[i][j] = subset[i][j] || subset[i - set[j - ``1``]][j - ``1``]; ` `            ``} ` `        ``} ` ` `  `        ``/* // uncomment this code to print table ` `        ``for (int i = 0; i <= sum; i++) ` `        ``{ ` `        ``for (int j = 0; j <= n; j++) ` `            ``System.out.println (subset[i][j]); ` `        ``} */` ` `  `        ``return` `subset[sum][n]; ` `    ``} ` ` `  `    ``/* Driver program to test above function */` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``int` `set[] = { ``3``, ``34``, ``4``, ``12``, ``5``, ``2` `}; ` `        ``int` `sum = ``9``; ` `        ``int` `n = set.length; ` `        ``if` `(isSubsetSum(set, n, sum) == ``true``) ` `            ``System.out.println(``"Found a subset"` `                               ``+ ``" with given sum"``); ` `        ``else` `            ``System.out.println(``"No subset with"` `                               ``+ ``" given sum"``); ` `    ``} ` `} ` ` `  `/* This code is contributed by Rajat Mishra */`

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.