knapsack

本文源于背包九講狰右,主要講述最為基本的三種背包問題,并分析彼此之間的聯(lián)系舆床,最終找到一個(gè)“通用”的思維方式棋蚌。首先會給出一個(gè)基本的解決方案,之后再思考如何“思考”出這種方案挨队。

1附鸽,01背包

有N件物品和一個(gè)容量為V的背包。第i件物品的費(fèi)用是c[i]瞒瘸,價(jià)值是w[i]坷备。求解將哪些物品裝入背包可使價(jià)值總和最大。

基本思路

因?yàn)橛蠳件物品情臭,每件有兩種選擇省撑,放或不放,以dp[i][j]表示前i件物品在體積j的背包中所獲得的最大價(jià)值俯在,得到簡單關(guān)系: <dp[i][j] = max(dp[i-1][j], dp[i-1][j-c[i]]+w[i])>, 關(guān)鍵有兩點(diǎn):

  • 如何表示子問題(dp[i][j])
  • 找到狀態(tài)方程

思維過程

最終的最優(yōu)解就是N個(gè)物品中選取M個(gè)的組合竟秫,只要找到特定的M個(gè)組合即可,這將是一個(gè)2^N的問題跷乐,問題太多肥败,此時(shí)我們換個(gè)思路(關(guān)鍵來了),原問題為1愕提,2馒稍,3...N, 最優(yōu)解為n1,n2,n3...nM, 此時(shí)我們既不知道結(jié)尾的nM,也不知道開頭的n1浅侨,那意味著我們要進(jìn)行遍歷纽谒,此時(shí)我們以結(jié)尾為例,假設(shè)他們以i結(jié)尾如输,即前i個(gè)物品所獲得的最大值鼓黔,此時(shí)再添加上限制條件j央勒,從而得到子問題---dp[i][j]。
剩下的狀態(tài)方程就顯而易見了澳化。

2崔步,完全背包

有N種物品和一個(gè)容量為V的背包,每種物品都有無限件可用缎谷。第i種物品的費(fèi)用是c[i]刷晋,價(jià)值是w[i]。求解將哪些物品裝入背包可使這些物品的費(fèi)用總和不超過背包容量慎陵,且價(jià)值總和最大眼虱。

基本思路

由于都是整數(shù),所以每件物品的最高數(shù)目是有限制的(V/c[i])席纽,看似“無限”的問題轉(zhuǎn)化為“有限”捏悬,如果構(gòu)造一個(gè)加長數(shù)組的話,就是01背包润梯。但是我們還有更優(yōu)的算法过牙。

思維過程

不要考慮01背包,完全當(dāng)作一個(gè)新的題目纺铭,還是先從最后的結(jié)果來推到寇钉。最優(yōu)解必然是選了m件物品,每件有一定的數(shù)量舶赔,顯然考慮組合的情況太多扫倡,換個(gè)思路,對于每件物品要么選了要么沒選竟纳,自然為了確定最后一個(gè)被選的物品我們需要遍歷撵溃,dp[i][j]表示前i件在體積j中的最優(yōu)解。狀態(tài)方程的思路任然是第i件要么在里面锥累,要么不在里面(注意這里的“在里面”意味著可以有多件缘挑,與01中的“可選”,“可不選”區(qū)分)桶略,從而dp[i][j] = max(dp[i-1][j],dp[i][j-c[i]]+w[i]).

3, 多重背包

有N種物品和一個(gè)容量為V的背包语淘。第i種物品最多有n[i]件可用,每件費(fèi)用是c[i]际歼,價(jià)值是w[i]惶翻。求解將哪些物品裝入背包可使這些物品的費(fèi)用總和不超過背包容量,且價(jià)值總和最大蹬挺。

基本思路

好吧维贺,和完全背包一模一樣它掂,轉(zhuǎn)化為01背包即可巴帮。利用2進(jìn)制可以進(jìn)行簡單的優(yōu)化剪侮,就不多講了梅桩。
<dp[i][j] = max(dp[i-1][j-k*c[i]]+k*w[i])> (0<=k<=n[i]), 當(dāng)k=1時(shí)就是01背包問題,所以01背包只是多重背包的一個(gè)特例而已,但兩者背后的“思維過程”是一致的伊履。同理,完全背包與多重背包非常類似(至于誰是誰的特例不好說)尊勿,所以二者的基本解決方案是一致的报慕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜻拨,隨后出現(xiàn)的幾起案子池充,更是在濱河造成了極大的恐慌,老刑警劉巖缎讼,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件收夸,死亡現(xiàn)場離奇詭異,居然都是意外死亡血崭,警方通過查閱死者的電腦和手機(jī)卧惜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夹纫,“玉大人咽瓷,你說我怎么就攤上這事〗⒍铮” “怎么了茅姜?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長月匣。 經(jīng)常有香客問我匈睁,道長,這世上最難降的妖魔是什么桶错? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任航唆,我火速辦了婚禮,結(jié)果婚禮上院刁,老公的妹妹穿的比我還像新娘糯钙。我一直安慰自己,他們只是感情好退腥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布任岸。 她就那樣靜靜地躺著,像睡著了一般狡刘。 火紅的嫁衣襯著肌膚如雪享潜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天嗅蔬,我揣著相機(jī)與錄音剑按,去河邊找鬼疾就。 笑死,一個(gè)胖子當(dāng)著我的面吹牛艺蝴,可吹牛的內(nèi)容都是我干的猬腰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猜敢,長吁一口氣:“原來是場噩夢啊……” “哼姑荷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缩擂,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤鼠冕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后胯盯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體供鸠,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年陨闹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了楞捂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趋厉,死狀恐怖寨闹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情君账,我是刑警寧澤繁堡,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站乡数,受9級特大地震影響椭蹄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜净赴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一绳矩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玖翅,春花似錦翼馆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猜极,卻和暖如春中姜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跟伏。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工丢胚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翩瓜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓嗜桌,卻偏偏與公主長得像奥溺,于是被迫代替她去往敵國和親辞色。 傳聞我的和親對象是個(gè)殘疾皇子骨宠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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