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

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.

Following is naive recursive implementation that simply follows the recursive structure mentioned above.
C#
// A recursive solution for subset sum problemusing 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
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 problemusing 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
Found a subset with given sum

Please refer complete article on Subset Sum Problem | DP-25 for more details!
C# Programs
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Program to Print a New Line in C#
C# Program to Convert a Binary String to an Integer
C# Program to print all permutations of a given string
Different Ways to Take Input and Print a Float Value in C#
C# Program to Read and Write a Byte Array to File using FileStream Class
C# Program to Demonstrate the IList Interface
How to Convert ASCII Char to Byte in C#?
C# Program to Check a Specified Type is an Enum or Not
How to Calculate the Code Execution Time in C#?
How to Remove Duplicate Values From an Array in C#?