private static boolean subSetSum(int inputArray[], int targetSum){
		int positiveSum = 0;
		Arrays.sort(inputArray);
		for(int currentElement : inputArray){
			positiveSum += currentElement;
		}
		if(targetSum > positiveSum)
			return false;
		boolean dpTable[][] = new boolean[positiveSum + 1][inputArray.length];
		int currentXIndex = 0;
		int currentSum = 0;
		for(; currentSum<=positiveSum; currentSum ++){
			int currentYIndex = 0;
			for(int currentElement : inputArray){
				if(currentElement == currentSum){
					dpTable[currentXIndex][currentYIndex] = true;
				}
				else if(currentYIndex - 1 >= 0){
					int remainingSumIndex = currentSum - currentElement;
					if(dpTable[currentXIndex][currentYIndex - 1] == true){
						dpTable[currentXIndex][currentYIndex] = true;
					}
					else if(remainingSumIndex >= 0 && dpTable[remainingSumIndex][inputArray.length - 1] == true){
						dpTable[currentXIndex][currentYIndex] = true;
					}
					else
						dpTable[currentXIndex][currentYIndex] = false;
				}
				else{
					dpTable[currentXIndex][currentYIndex] = false;
				}
				currentYIndex += 1;
			}
			currentXIndex += 1;
		}
		//printDPTable(dpTable);
		return dpTable[targetSum][inputArray.length - 1];
	}