日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

动态规划——01背包问题

發(fā)布時(shí)間:2025/3/15 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划——01背包问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

給定一組有固定價(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è)例子:

限重 5 kg 質(zhì)量: 1 ,2 , 4 價(jià)值:10,16,30

最大價(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è)物品:

if(c[i] > j)dp[i][j] = dp[i - 1][j];//情況② elsedp[i][j] = max(p[i - 1][j], p[i - 1][j - w[i]] + v[i]);//①

我慢慢分析這一行代碼。
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à)值

for(int i = 1; i <= N; i++) //i對(duì)應(yīng)第i個(gè)物品,i的循環(huán)放外面,V[i][] 對(duì)應(yīng)數(shù)據(jù)由V[i-1][] 決定{for(int j = 1; j <= M; j++) //j對(duì)應(yīng)當(dāng)前背包能承受重量為j{if(j >= [i]) {p[i][j] = max(p[i - 1][j], p[i - 1][j - w[i]] + v[i]);}else{p[i][j] = p[i - 1][j];}}}

總結(jié)

以上是生活随笔為你收集整理的动态规划——01背包问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。