这个优化是我从以下最优解得到的思路
测评记录
虽然代码不可见,但是根据其内存多了一点,猜想可能多了一个布尔数组,实际如何就不知道了。因为如果按我下面说的做内存应该会少一半,而不是多,但至少也是给了我点启发。
所以就有了以下优化,把 a 数组从大到小排序,将前 n-1 个数进行状压dp,同时开一个数组用于单独记录剩余容量对于最后一个数能否容纳,最后看此前的dp数组是否有剩余能容纳最后一个,决定答案是否加1。
该优化可将时间缩短一半,和上面最优解链接中的第15个点耗时为正常做法耗时一半相吻合,且该优化能通过本题。但实际上这个优化是否正确存疑:
输入:
3 2
11 6 6
12 11
输出:
2
我加了该优化后的输出为无解,即"NIE"。可能是我对于该优化的理解不足,没有写好。又或者是因为这个优化本来就是错的?
无论如何,至少可以说数据水了点?同时该优化至少在纯dp的做法中是有错误的,但好像可以通过结合搜索来减少错误概率?