/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class SubSet
{
public static void main
(String[] args
) {
List<List<Integer>> subsets = subsetsK(set, 16);
for (List<Integer> subset : subsets)
{
}
}
static List
<List
<Integer
>> subsetsK
(Integer[] arr,
int k
) {
int t = 0;
for (int n : arr) t += n;
List<List<Integer>> subsets = new ArrayList<>();
allSubsets
(subsets, arr,
new BitSet(arr.
length),
0,
0, t
- k
); return subsets;
}
public static void allSubsets
(List
<List
<Integer
>> subsets,
Integer[] arr,
BitSet off,
int pos,
int sum,
int lim
) {
if(sum > lim) return;
if(pos == arr.length)
{
subsets.add(toSubset(arr, off));
return;
}
off.set(pos);
allSubsets(subsets, arr, off, pos + 1, sum + arr[pos], lim);
off.clear(pos);
allSubsets(subsets, arr, off, pos + 1, sum, lim);
}
{
List<Integer> ss = new ArrayList<>();
for (int i = 0; i < arr.length; i++)
{
if (!off.get(i))
ss.add(arr[i]);
}
return ss;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgU3ViU2V0CnsKCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQoJewoJCUludGVnZXJbXSBzZXQgPSB7IDEsIDUsIDksIDIsIDMgfTsKCQlMaXN0PExpc3Q8SW50ZWdlcj4+IHN1YnNldHMgPSBzdWJzZXRzSyhzZXQsIDE2KTsKCQlmb3IgKExpc3Q8SW50ZWdlcj4gc3Vic2V0IDogc3Vic2V0cykKCQl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbihzdWJzZXQpOwoJCX0KCX0KCglzdGF0aWMgTGlzdDxMaXN0PEludGVnZXI+PiBzdWJzZXRzSyhJbnRlZ2VyW10gYXJyLCBpbnQgaykKCXsKCQlpbnQgdCA9IDA7CgkJZm9yIChpbnQgbiA6IGFycikgdCArPSBuOwoKCQlMaXN0PExpc3Q8SW50ZWdlcj4+IHN1YnNldHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCQlhbGxTdWJzZXRzKHN1YnNldHMsIGFyciwgbmV3IEJpdFNldChhcnIubGVuZ3RoKSwgMCwgMCwgdCAtIGspOwoJCXJldHVybiBzdWJzZXRzOwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBhbGxTdWJzZXRzKExpc3Q8TGlzdDxJbnRlZ2VyPj4gc3Vic2V0cywgSW50ZWdlcltdIGFyciwgQml0U2V0IG9mZiwgaW50IHBvcywgaW50IHN1bSwgaW50IGxpbSkKCXsKCQlpZihzdW0gPiBsaW0pIHJldHVybjsKCQkKCQlpZihwb3MgPT0gYXJyLmxlbmd0aCkKCQl7CgkJCXN1YnNldHMuYWRkKHRvU3Vic2V0KGFyciwgb2ZmKSk7CgkJCXJldHVybjsKCQl9CgoJCW9mZi5zZXQocG9zKTsKCQlhbGxTdWJzZXRzKHN1YnNldHMsIGFyciwgb2ZmLCBwb3MgKyAxLCBzdW0gKyBhcnJbcG9zXSwgbGltKTsKCgkJb2ZmLmNsZWFyKHBvcyk7CgkJYWxsU3Vic2V0cyhzdWJzZXRzLCBhcnIsIG9mZiwgcG9zICsgMSwgc3VtLCBsaW0pOwoJfQoKCXN0YXRpYyBMaXN0PEludGVnZXI+IHRvU3Vic2V0KEludGVnZXJbXSBhcnIsIEJpdFNldCBvZmYpCgl7CgkJTGlzdDxJbnRlZ2VyPiBzcyA9IG5ldyBBcnJheUxpc3Q8PigpOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKQoJCXsKCQkJaWYgKCFvZmYuZ2V0KGkpKQoJCQkJc3MuYWRkKGFycltpXSk7CgkJfQoJCXJldHVybiBzczsKCX0JCn0KCg==
[5, 9, 3]
[5, 9, 2]
[5, 9, 2, 3]
[1, 5, 9, 3]
[1, 5, 9, 2]
[1, 5, 9, 2, 3]