public static void Main()
int[] array = new[] {3, 34, 4, 12, 5, 2};
bool hasSubsetSum = HasSubsetSum(array, targetSum);
string message = hasSubsetSum ? "Yes there is a subset with sum:"+targetSum : "There is no subset that sums up to:"+targetSum;
Console.WriteLine(message);
private static bool HasSubsetSum(int[] array, int targetSum)
else if(array == null || array.Length == 0)
bool[,] memory = new bool[array.Length+1, targetSum+1];
for(int i = 0;i < array.Length+1;i++)
for(int i = 1;i < targetSum+1;i++)
for(int i = 1; i < array.Length+1;i++)
for(int currentSum = 1; currentSum < targetSum+1;currentSum++)
int currentElement = array[i];
if(currentElement > currentSum)
memory[i, currentSum] = memory[i-1, currentSum];
bool excludingCurrentElement = memory[i-1, currentSum];
int remainingSum = currentSum-currentElement;
bool includingCurrentElement = memory[i-1, remainingSum];
memory[i, currentSum] = excludingCurrentElement || includingCurrentElement;
return memory[array.Length, targetSum];