運用二進位制,折半搜尋,其實我覺得本質就是狀壓思想,,,
列舉前一半所有情況並儲存。
然後排序保障總質量越大,價值越大。
這裡相當於貪心。
可以證明的,如果在一堆一一對應的數裡面,只取乙個,另外乙個數越大才越有可能是最優解。
這個思想大概只能用在只取乙個上面。
再列舉後半部分。
算出每一種列舉方式的總質量,w-wi就是他在前一半的質量,二分搜尋一下,就能找到總質量和不大於w的最大價值了。
emmmm最後說一下lower_bound函式,大多數用的都是
ll tv=
(lower_bound
(ps,ps+m,
make_pair
(wi,inf)-1
)->second;
返回迭代器,指標指向second。
所以lowerbound在比較pair的時候,大概是先比較first,再來second把。所以才要賦值成inf,方便無論first相不相等,都要減一。
超大揹包問題(01揹包)
超大揹包問題 有n個重量和價值分別為w i 和v i 的物品,從這些物品中挑選總重量不超過w的物品,求所有挑選方案中價值總和的最大值。其中,1 n 40,1 w i v i 10 15,1 w 10 15.這個問題給人的第一感覺就是普通的01揹包。不過,看完資料範圍會發現,這次價值和重量都可以是非常...
超大容量揹包問題
這個問題給人的第一感覺就是普通的01揹包。不過,看完資料範圍會發現,這次價值和重量都可以是非常大的數值,相比之下n比較小。使用dp求解揹包為題的複雜度是o nw 因此不能用來解決這個問題。此時我們應該利用n比較小的特點來尋找其他方法。挑選物品的方案總共有2 n種,所以不能直接列舉,但是如果將物品分成...
超大揹包問題題解
有 n nn 個重量和價值分別為 w iw i wi 和 v iv i vi 的物品。從這些物品中挑選出總重量不超過 w ww 的物品放入揹包中,求揹包裡物品價值總和的最大值。n wv 1w1v 2w2.vnw nn space w v 1 space w 1 v 2 space w 2 v n s...