动态规划——01背包问题
給定一組有固定價(jià)值和固定重量的物品,以及一個(gè)已知最大承重量的背包,求在不超過(guò)背包最大承重量的前提下,能放進(jìn)背包里面的物品的最大總價(jià)值。要求物品不能分割開(kāi)來(lái)。
01代表裝或不裝。
問(wèn)題的難點(diǎn)在于哪里呢?
首先最終目的是總價(jià)值最大,而承重量則是一個(gè)限制條件。一般而言。對(duì)于背包問(wèn)題的貪心算法是計(jì)算性?xún)r(jià)比后優(yōu)先放入性?xún)r(jià)比高的物品,由于貪心類(lèi)問(wèn)題中允許把物體分開(kāi)后放入背包,其實(shí)并不難。
而在動(dòng)態(tài)分配問(wèn)題中呢?
物體不能被分割的情況下,如何能做到價(jià)值的最大化變成了難點(diǎn),不一定性?xún)r(jià)比最高的最后獲得的總價(jià)值最高,因?yàn)槌兄亓康南拗瓶赡軐?dǎo)致你在放入性?xún)r(jià)比最高的物體后,就無(wú)法繼續(xù)放入了,反而導(dǎo)致總價(jià)值不高。
舉個(gè)例子:
最大價(jià)值為40
如果按性?xún)r(jià)比排名放入只能拿到26了。
因此怎么去考慮這類(lèi)問(wèn)題呢?
就拿第一個(gè)物品來(lái)說(shuō)
總的問(wèn)題可以分解為兩個(gè)子問(wèn)題:
①裝第一個(gè)物品 我剩余的空間能裝多大價(jià)值的物品
②不裝第一個(gè)物品 我剩余的空間能裝多大價(jià)值的物品
類(lèi)推到第i個(gè)物品:
我慢慢分析這一行代碼。
p[i][j]代表的是在限重為j的情況下,前n個(gè)物品能獲得的最大價(jià)值。
max是系統(tǒng)函數(shù)max,返回兩個(gè)值中的較大值。
是哪兩個(gè)值呢?
p[ i-1 ][ j ]和 j - w[i] ] + v[ i ] ,分別對(duì)應(yīng)兩種子問(wèn)題。
p[ i-1 ][ j ]對(duì)應(yīng)的是上面的②,即在不拿第i個(gè)物品,在限重為j的情況下,前i-1個(gè)物品能取得的最大價(jià)值
j - w[i] ] + v[ i ] 對(duì)應(yīng)①,即拿了第i個(gè)物品,在限重為j-w[i](第i個(gè)物品確定拿,剩余空間減小了)的情況下,前i-1個(gè)物品能拿到的最大價(jià)值加上第i個(gè)物品的價(jià)值
總結(jié)
以上是生活随笔為你收集整理的动态规划——01背包问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电钻有刷好还是无刷好_高中物理好的来看看
- 下一篇: 计算机二级学那个科目,考计算机二级选哪个