[问题] 请教 ZJ c824/c835 的01背包问题(已解决)

楼主: fatcat8127 (胖胖猫)   2019-02-27 00:35:38
如题,这两题的题目叙述和要求都是相同的,但特别之处在于物品的重量和背包负重都是2
的次方项,要求和01背包问题一样问价值总和最大化。
想问一下解题方向或是想法,自己google了一下没看到有题解也不知道怎么下关键字和01背
包做区隔,先谢谢各位大大的回复。
因为输入的物品数量高达1e6个,而且重量和2的次方项有关,就异想天开想说会不会和
Huffman-Code 的编码方式有关,所以写了一个初版本,通过51%测资而已。
以下是我的程式码:https://www.codepile.net/pile/A71bYyDz
作者: oToToT (屁孩)   2019-02-27 19:52:00
对于重量2^k时,我们把价值最大的两个合在一起凑出重量2^{k+1}的物品,一直做到重量2^k的剩下一个或零个。如果剩一个我们再考虑加入一个重量2^k价值为0的物品,让剩的那个也可以合上去,这样直接看重量2^M中,价值最大的那个物品就好。因为可以证明在每个重量最多加入一个价值为0的东西时,用最优解选完选到一些价值为0的东西并不会影响答案一份有点慢的AC code https://goo.gl/fBCRZC
楼主: fatcat8127 (胖胖猫)   2019-02-28 01:52:00
感谢大大的说明和程式码根据我自己的理解和今天讨论区的回复,解法就是建立Binominal Heap的过程吗

Links booklink

Contact Us: admin [ a t ] ucptt.com