Related Articles

# C# Program for Subset Sum Problem | DP-25

• Difficulty Level : Easy
• Last Updated : 12 Dec, 2018

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.

## C#

 `// A recursive solution for subset sum problem``using` `System;`` ` `class` `GFG {``    ``// Returns true if there is a subset of set[] with sum``    ``// equal to given sum``    ``static` `bool` `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``    ``public` `static` `void` `Main()``    ``{``        ``int``[] ``set` `= { 3, 34, 4, 12, 5, 2 };``        ``int` `sum = 9;``        ``int` `n = ``set``.Length;``        ``if` `(isSubsetSum(``set``, n, sum) == ``true``)``            ``Console.WriteLine(``"Found a subset with given sum"``);``        ``else``            ``Console.WriteLine(``"No subset with given sum"``);``    ``}``}`` ` `// This code is contributed by Sam007`
Output:
```Found a subset with given sum
```

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

## C#

 `// A Dynamic Programming solution for subset sum problem``using` `System;`` ` `class` `GFG {``    ``// Returns true if there is a subset``    ``// of set[] with sun equal to given sum``    ``static` `bool` `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``        ``bool``[, ] subset = ``new` `bool``[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 bottom 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];``            ``}``        ``}`` ` `        ``return` `subset[sum, n];``    ``}`` ` `    ``// Driver program``    ``public` `static` `void` `Main()``    ``{``        ``int``[] ``set` `= { 3, 34, 4, 12, 5, 2 };``        ``int` `sum = 9;``        ``int` `n = ``set``.Length;``        ``if` `(isSubsetSum(``set``, n, sum) == ``true``)``            ``Console.WriteLine(``"Found a subset with given sum"``);``        ``else``            ``Console.WriteLine(``"No subset with given sum"``);``    ``}``}``// This code is contributed by Sam007`
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