sum of subset backtracking
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[n];
int sum = 0;
for(int i=0 ; i<n ; i++){
int x = sc.nextInt();
arr[i] = x;
sum += x;
}
int target = sc.nextInt();
System.out.println(isSubsetPresent(arr, 0, 0, sum, target));
}
public static boolean isSubsetPresent(int arr[],int i, int curr_sum, int sum, int target){
System.out.print(curr_sum+" ");
if(i == arr.length) return false;
if(sum == 0) return true;
if(curr_sum == target) return true;
if(curr_sum > target) return false;
boolean f1 = false;
boolean f2 = false;
if(curr_sum + arr[i] <= target)
f1 = isSubsetPresent(arr, i+1, curr_sum+arr[i], sum-arr[i], target);
if(curr_sum + arr[i] > target || f1==false)
f2 = isSubsetPresent(arr, i+1, curr_sum, sum, target);
return (f1||f2);
}
}