刷題心得 揹包問題的列舉方式

2022-03-20 03:08:28 字數 269 閱讀 3539

以0/1揹包為例,到底正序列舉還是倒序列舉?

正序列舉還是倒敘列舉的原則取決於0/1揹包的性質,即乙個階段的狀態(1個物品)不能被放進揹包兩次。如果正序列舉的話,當前階段被上乙個階段更新,而下乙個階段仍然可能被上乙個階段更新。多以就相當於乙個物品被放進了揹包兩次。違背0/1揹包的規則。

而完全揹包就不需要考慮這一點,因為物品是無限多個,隨便挑最優的往裡扔即可。

所以0/1揹包必須倒敘列舉,才能保證乙個狀態不被重複更新。而完全揹包需要正序列舉,才能維護一種物品有好多個的這個性質。

刷題之路 揹包問題

乙個揹包有一定的承重cap,有n件物品,每件都有自己的價值,記錄在陣列v中,也都有自己的重量,記錄在陣列w中,每件物品只能選擇要裝入揹包還是不裝入揹包,要求在不超過揹包承重的前提下,選出物品的總價值最大。給定物品的重量w價值v及物品數n和承重cap。請返回最大總價值。經典動態規劃問題,類似於找零錢問...

Python 刷題筆記 揹包問題

刷動態規劃的第二天,有些自閉,剛靠著大魔王的歌緩過來了。關於動態規劃,我還處於看題解時哦哦哦 看題目時?的階段,所以整理的點不深。除了昨天推給大家的鏈結,今天也是發現了一位刷題大牛的寶藏,不僅動態規劃,各類演算法都做了整理 引導,屬實 respect 動態規劃專題 關於動態規劃,我現階段的理解是在窮...

超大揹包問題 折半列舉

超大揹包問題 有重量和價值分別為wi,vi的n個物品,從這些物品中挑選總重量不超過w的物品,求所有挑選方案中價值總和的最大值。1 1 1因為wi,太大,陣列開不了,而我們發現n的數量較少,可以使用折半列舉。首先列舉前n 2個揹包的所有可能結果,儲存在結構體ps n sv ps n sw中,然後按sw...