就是给定
n
n
n 个数(
n
<
=
35
n<=35
n<=35 ),然后让你选择一个子集
S
S
S ,使得
S
S
S 中的数和的绝对值最小,让输出这个最小值和集合
S
S
S 大小,如果存在多个值相等的集合,输出集合大小最小的那个。
思路
由于
n
<
=
35
n<=35
n<=35 直接枚举子集
S
S
S 会超时,所以需要用到一个技巧,就是折半枚举。
折半的话,一般最多
18
18
18 个元素,二进制枚举不会超时,将前半段二进制枚举所得各项集合大小和元素值存入
m
a
p
map
map 中(在此期间也需要维护最优解,因为最优解可能只出现在前半段,后半段也一样),在后半段二进制枚举时,假设枚举所得结果为
s
u
m
sum
sum,就去
m
a
p
map
map 里去找值靠近
−
s
u
m
-sum
−sum 的值,具体看代码。