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\) 数组中最大值,可以通过本题。

代码

posted @ 2022-04-30 14:57  1358id  阅读(34)  评论(0编辑  收藏  举报