動態(tài)規(guī)劃1.2--背包問題之完全背包

本文參考:動態(tài)規(guī)劃:關(guān)于完全背包易结,你該了解這些!

1练对、問題定義

上一節(jié),我們介紹了0-1背包痢法,每種物品只有一件時柴钻,背包能裝的最大價值。本節(jié)货葬,我們討論當每種物品的數(shù)量不限(也就是可以放入背包多次)時采幌,背包能裝的最大價值。

2震桶、遍歷順序

0-1背包和完全背包唯一不同就是體現(xiàn)在遍歷順序上休傍,所以本文就不去做動規(guī)五部曲了,我們直接針對遍歷順序經(jīng)行分析蹲姐!
首先磨取,我們回顧一下,用滾動數(shù)組實現(xiàn)的01背包

for(int i = 0; i < weight.size(); i++) { // 遍歷物品
  for(int j = bagWeight; j >= weight[i]; j--) { // 遍歷背包容量
      dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
  }
}

01背包內(nèi)嵌的循環(huán)是從大到小遍歷柴墩,為了保證每個物品僅被添加一次忙厌。當從小到大遍歷時,同一個物體會被添加多次江咳,這不正是完全背包需要的嗎逢净?!
完全背包的物品是可以添加多次的,所以要從小到大去遍歷爹土,即:

// 先遍歷物品甥雕,再遍歷背包
for(int i = 0; i < weight.size(); i++) { // 遍歷物品
    for(int j = weight[i]; j < bagWeight ; j++) { // 遍歷背包容量
        dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
    }
}

三、內(nèi)外循環(huán)

其實還有一個很重要的問題胀茵,為什么遍歷物品在外層循環(huán)社露,遍歷背包容量在內(nèi)層循環(huán)?

這個問題大家都默認遍歷物品在外層琼娘,遍歷背包容量在內(nèi)層峭弟,好像本應(yīng)該如此一樣,那么為什么呢轨奄?
01背包中二維dp數(shù)組的兩個for遍歷的先后循序是可以顛倒了孟害,一位dp數(shù)組的兩個for循環(huán)先后循序一定是先遍歷物品,再遍歷背包容量挪拟。

在完全背包中挨务,對于一維dp數(shù)組來說,其實兩個for循環(huán)嵌套順序同樣無所謂!

因為dp[j] 是根據(jù) 下標j之前所對應(yīng)的dp[j]計算出來的。只要保證下標j之前的dp[j]都是經(jīng)過計算的就可以了抗楔。

遍歷物品在外層循環(huán),遍歷背包容量在內(nèi)層循環(huán)朝巫,狀態(tài)如圖:


遍歷背包容量在外層循環(huán),遍歷物品在內(nèi)層循環(huán)石景,狀態(tài)如圖:

看了這兩個圖劈猿,大家就會理解,完全背包中潮孽,兩個for循環(huán)的先后循序揪荣,都不影響計算dp[j]所需要的值(這個值就是下標j之前所對應(yīng)的dp[j])。

最后往史,又可以出一道面試題了仗颈,就是純完全背包,要求先用二維dp數(shù)組實現(xiàn)椎例,然后再用一維dp數(shù)組實現(xiàn)挨决,最后在問,兩個for循環(huán)的先后是否可以顛倒订歪?為什么脖祈?這個簡單的完全背包問題,估計就可以難住不少候選人了刷晋。

參考:動態(tài)規(guī)劃:關(guān)于完全背包撒犀,你該了解這些福压!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掏秩,一起剝皮案震驚了整個濱河市或舞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒙幻,老刑警劉巖映凳,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異邮破,居然都是意外死亡诈豌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門抒和,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矫渔,“玉大人,你說我怎么就攤上這事摧莽∶硗荩” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵镊辕,是天一觀的道長油够。 經(jīng)常有香客問我,道長征懈,這世上最難降的妖魔是什么石咬? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮卖哎,結(jié)果婚禮上鬼悠,老公的妹妹穿的比我還像新娘。我一直安慰自己亏娜,他們只是感情好焕窝,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著照藻,像睡著了一般袜啃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幸缕,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天群发,我揣著相機與錄音,去河邊找鬼发乔。 笑死熟妓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的栏尚。 我是一名探鬼主播起愈,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抬虽?” 一聲冷哼從身側(cè)響起官觅,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阐污,沒想到半個月后休涤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡笛辟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年功氨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片手幢。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡捷凄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出围来,到底是詐尸還是另有隱情跺涤,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布管钳,位于F島的核電站钦铁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏才漆。R本人自食惡果不足惜牛曹,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望醇滥。 院中可真熱鬧黎比,春花似錦、人聲如沸鸳玩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽不跟。三九已至颓帝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窝革,已是汗流浹背购城。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虐译,地道東北人瘪板。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像漆诽,于是被迫代替她去往敵國和親侮攀。 傳聞我的和親對象是個殘疾皇子锣枝,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容