国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

[算法]動(dòng)態(tài)規(guī)劃之0-1背包

2019-11-10 18:07:36
字體:
供稿:網(wǎng)友

問題描述

描述:石頭收藏家小明在徒步登山的時(shí)候發(fā)現(xiàn)了一堆美麗的石頭。這些石頭價(jià)值不菲,但是都很重,小明自身的力氣有限,一次只能拿他拿得動(dòng)的一部分。每塊石頭的重量不同,價(jià)值也不同。問小明在力所能及的情況下能拿走價(jià)值多少的石頭。 說明:小明只能搬運(yùn)一次。 例如:小明只能拿得動(dòng) 10 kg,每塊石頭的重量分別為2kg,3kg,5kg,7kg,對(duì)應(yīng)的價(jià)值分別為 1萬,5萬,2萬,4萬。小明能拿的是 3kg 以及 7kg 的石頭,價(jià)值 9 萬。 輸入 使用分號(hào)(;)分隔三組數(shù)據(jù)。 第一組為一個(gè)整數(shù),表示小明一次能搬運(yùn)的最大重量。 第二組為一個(gè)使用逗號(hào)(,)分隔的數(shù)組,表示每塊石頭的重量。 第三組為一個(gè)使用逗號(hào)(,)分隔的數(shù)組,表示每塊石頭的對(duì)應(yīng)的價(jià)值。

輸出 一個(gè)整數(shù),表示小明這次能帶回去的石頭的總價(jià)。

輸入樣例 10;2,3,5,7;1,5,2,4 輸出樣例 9

思路

動(dòng)態(tài)規(guī)劃 dp[i,w]表示背包容量為w時(shí),i個(gè)物品最優(yōu)解的總價(jià)值,可得到以下推導(dǎo)公式 i=0或w=0, dp[i,w]=0; wi>w, dp[i,w]=dp[i-1,w]; i>0且wi<=w, dp[i,w]=max{dp[i-1,w-wi}+vi,dp[i-1,w]} 其中dp[i-1,w-wi}+vi表示 選擇第i個(gè)物品時(shí),所獲得的最優(yōu)解, dp[i-1,w]表示不選擇第i個(gè)物品時(shí)的最優(yōu)解.

實(shí)現(xiàn)時(shí)dp[i,w]可以用一個(gè)二維數(shù)組來實(shí)現(xiàn),為了壓縮空間,也可以使用一維數(shù)組.

二維數(shù)組下的求解順序,物品數(shù)1—>n, 背包容量1—>w。要使用一維數(shù)組,背包容量要采用倒序,即w—>1, 只有這樣對(duì)于方程dp[j] = max{( dp[j], dp (j-w[i] ) + v[i] },才能達(dá)到等式左邊才表示i,而等式右邊表示i-1的效果。

代碼

public static int solve(int n ,int w, int[] weight, int[] value){ //動(dòng)態(tài)規(guī)劃結(jié)果數(shù)組 int[] dp=new int[w+1]; //最優(yōu)值dp[j]=max{dp[j], dp[j-w[i]]+vi} , 其中0<=j<=w; for(int i=0;i<n;i++){ for(int j=w;j>=weight[i];j--){ if(dp[j-weight[i]]+value[i]>dp[j]){ dp[j]=dp[j-weight[i]]+value[i]; } } } return dp[w]; }

參考: http://blog.csdn.net/sj13051180/article/details/6687674


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 常山县| 衡南县| 安溪县| 乌兰浩特市| 大名县| 石景山区| 屯昌县| 广西| 松溪县| 桂林市| 兖州市| 连南| 苏尼特左旗| 赤壁市| 乐至县| 通许县| 田阳县| 宜宾县| 华容县| 溆浦县| 巴林左旗| 深泽县| 谷城县| 肇源县| 延川县| 开鲁县| 桃园县| 华池县| 新乡市| 海口市| 司法| 平邑县| 廉江市| 资兴市| 莱州市| 乌拉特前旗| 赞皇县| 寿宁县| 沂水县| 三江| 清原|