ABC054D题解
题意:
在 \(n(1\leq n\leq40)\) 个物品中选择若干个,使得 \(\dfrac{\sum A_i}{\sum B_i}=\dfrac{ma}{mb}\) 且物品总价格最小。
可能是做题做魔怔了,见到 \(n\leq 40\) 就条件反射的想到了双端 DFS。
现在我们的问题就是左边和右边做完以后如何将答案进行合并。因为题目给了 \(a_i\leq10,b_i\leq10\) 的条件,我们可以发现满足 \(\dfrac{\sum A_i}{\sum B_i}=\dfrac{ma}{mb}\) 的 \(\sum A_i\) 与 \(\sum B_i\) 的种类数是很少的。最多的情况下,当 \(ma=mb=1\) 时,总计有 \(400\) 种情况。所以我们完全可以打一个表,记录那些成立的 \((\sum A_i,\sum B_i)\) 的数对。右边每做出来一个 \((\sum A_r,\sum B_r)\) 时,对于每一组预处理出的合法 \((\sum A,\sum B)\) ,可以对应的去寻找左半部分做到的答案。这时更新答案即可。时间复杂度是 \(O(nm\times2^{n/2})\),\(m\) 指 \(A,B\) 数组中最大值,可以通过本题。