[算法]折半搜索+数学计数 [题意]给定n个数(n<=20),定义一种方案为选择若干个数,这些数可以分成两个和相等的集合(不同划分方式算一种),求方案数(数字不同即方案不同). [题解] 考虑直接枚举集合的子集,再枚举子集的子集(划分方式),相当于将子集看成天平,枚举子集一些数置左,剩余数置右,则每个数有三种可能:不选,置左,置右. 由此可知,直接枚举集合子集的子集复杂度是O(3^n). 考虑将总集划分成两半,则枚举一半的复杂度为O(3^(n/2)). 得到两半都如何合并? 如果相同集合不同划分…