import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; /** * @author 醉汝梦 * @date 2022/10/24 - 10:34 **/ public class back { static int a[];//用于存储S的正整数集合 static boolean x[];//用于记录各分支的情况 public static void backtrack(int i,int n,int w,int c) { if(i>n) return ; //取出该层的数字 x[i] = true; w = w+a[i]; if(w==c) { System.out.println("{"); for(int j = 0;j<=i;++j) { if(x[j] == true) System.out.println(a[j]+","); } System.out.println("}\n"); } else if(w<c) { backtrack(i+1,n,w,c); } x[i] = false; w = w-a[i]; backtrack(i+1,n,w,c); return ; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int w = 0;//用于记录此时的子集和 int n = sc.nextInt(); int c = sc.nextInt(); //给数组分配空间 a = new int[999]; x = new boolean[999]; for(int i= 0;i<n;++i) { a[i] = sc.nextInt(); } backtrack(0,n,w,c); } }
输入 :
5 20
8 9 11 12 3
输出:
{
9,
8,
3,
}
{
9,
11,
}
{
8,
12,
}