[問題] 請教 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