首先 dfs思路比较简单
目的是要凑出sum/2 贪心的想法 从价值大的往小的选 一次选的尽量多个
这样的话 方法是正确的 因为石子数量庞大 会超时 需要一个强有力的我永远都想不到的剪枝 ( )
某大神的想法:
以第一步选择价值为6的石子为例,如果接下去的选择价值为5的石子的数量超过6个,则我们可以用5个价值为6的石子替代;同样,如果再接下去的选择价值为4的石子的个子超过3个,我们也可以用2个价值为6的石子替代,依此类推。于是我们可以得到,在有足够的价值为6的石子的前提下,设选择6的个数为count,那么必须有(sum/2 - count*6)<=(5*5+4*2+3+2*2+5)= 45.也就是回溯时count减小到一定数量不满足以上不等式时就停止,这样将剪去大部分的无用的搜索。当然,接下去的选择5,4,3,。。。都如此。
#include
#include
#include
#include
#include
#include
#include
#include
#include