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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

背包问题+图解

發(fā)布時(shí)間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 背包问题+图解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

圖解

代碼實(shí)現(xiàn)

package com.atguigu.dynamic;/*** @創(chuàng)建人 wdl* @創(chuàng)建時(shí)間 2021/4/3* @描述*/ public class KnapsackProblem {public static void main(String[] args) {int[] w={1,4,3};//物品的重量int[] val={1500,3000,2000};//物品的價(jià)值 這里的val[i]就是前面的v[i]int m=4;//背包的容量int n=val.length;//物品的個(gè)數(shù)//創(chuàng)建二維數(shù)組//v[i][j] 表示在前i個(gè)物品中能夠裝入容量為j的背包中的最大價(jià)值int[][] v = new int[n + 1][m + 1];//為了記錄放入商品的情況,我們定一個(gè)二維數(shù)組int[][] path = new int[n + 1][m + 1];//初始化第一行和第一列,這里在本程序中,可以不去處理,因?yàn)槟J(rèn)就是0for (int i = 0; i < v.length; i++) {v[i][0]=0;//將第一列設(shè)置為0}for (int i = 0; i < v[0].length; i++) {v[0][i]=0;//將第一行設(shè)置為0}//根據(jù)前面得到公式來(lái)動(dòng)態(tài)規(guī)劃處理for (int i = 1; i < v.length; i++) {//不處理第一行for (int j = 1; j < v[0].length; j++) {//不處理第一列//公式if(w[i-1]>j){//因?yàn)槲覀兂绦騣是從1開始的,因此原來(lái)公式中w[i]修改成w[i-1]v[i][j]=v[i-1][j];}else {//說(shuō)明://因?yàn)槲覀兊膇從1開始的,因此我們公式需要調(diào)整 // v[i][j]= Math.max(v[i-1][j],val[i-1]+v[i-1][j-w[i-1]]);//為了記錄商品存放到背包的情況,我們不能簡(jiǎn)單的使用上面的公式,需要使用if-else來(lái)體現(xiàn)if (v[i-1][j]<val[i-1]+v[i-1][j-w[i-1]]){v[i][j]=val[i-1]+v[i-1][j-w[i-1]];//把當(dāng)前的情況記錄到pathpath[i][j]=1;}else {v[i][j]=v[i-1][j];}}}}//輸出一下v看看目前的情況for (int i = 0; i < v.length; i++) {for (int j = 0; j < v[i].length; j++) {System.out.print(v[i][j]+" ");}System.out.println();}//輸出最后我們是放入的哪些商品//遍歷path,這樣輸出會(huì)把所有的放入情況都得到,其實(shí)我們只需要最后的放入 // for (int i = 0; i < path.length; i++) { // for (int j = 0; j < path[i].length; j++) { // if (path[i][j]==1) // System.out.println("第"+i+"個(gè)商品放入到背包"); // } // }//動(dòng)腦筋int i=path.length-1;//行的最大下標(biāo)int j=path[0].length-1;//列的最大下標(biāo)while (i>0&&j>0){//從path的最后開始找if (path[i][j]==1){System.out.println("第"+i+"個(gè)商品放入到背包");j-=w[i-1];}i--;}} }

總結(jié)

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

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