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