【演算法資料結構Java實現】Java實現動態規劃(背包問題),資料結構java

來源:互聯網
上載者:User

【演算法資料結構Java實現】Java實現動態規劃(背包問題),資料結構java
1.背景     追隨著buptwusuopu大神的腳步,最近在研習動態規劃。動態規劃應該叫一種解決問題的思想,記得又一次去某公司面試就被問到了這個。       多於動態規劃的理解,大致是這樣的,從空集合開始,每增加一個元素就求它的最優解,直到所有元素加進來,就得到了總的最優解。           比較典型的應用就是背包問題,有一個重量一定的包,有若干件物品,他們各自有不同的重量和價值,怎樣背才能取得最大價值。       錯誤的理解:去價值/重量比最大的物品多裝(之前我也是這麼想的,但是在背包重量一定的情況下這麼做並不合理,範例很容易想到)
2.題目       要實現的題目是摘抄於另一位大神的部落格,講的很好,可惜不是java實現的,有興趣可以看下面的引用。

題目描述:

有編號分別為a,b,c,d,e的五件物品,它們的重量分別是2,2,6,5,4,它們的價值分別是6,3,5,4,6,現在給你個承重為10的背包,如何讓背包裡裝入的物品具有最大的價值總和?

name weight value 1 2 3 4 5 6 7 8 9 10
a 2 6 0 6 6 9 9 12 12 15 15 15
b 2 3 0 3 3 6 6 9 9 9 10 11
c 6 5 0 0 0 6 6 6 6 6 10 11
d 5 4 0 0 0 6 6 6 6 6 10 10
e 4 6 0 0 0 6 6 6 6 6 6 6


3.代碼實現
public class Main { public static void main(String[] args) {// TODO Auto-generated method stub        final int packageWheight=10;//包的重量Package[] pg={   new Package(6,2,"a"),   new Package(3,2,"b"),   new Package(5,6,"c"),   new Package(4,5,"d"),   new Package(6,4,"e")   };int[][] bestValues = new int[pg.length+1][packageWheight+1];for(int i=0;i<=pg.length;i++){for(int j=0;j<=packageWheight;j++){if(i==0||j==0){bestValues[i][j]=0;//臨界情況}else{if(j<pg[i-1].getWheight()){bestValues[i][j] = bestValues[i-1][j];//當第n件物品重量大於包的重量時,最佳值取前n-1件的}else{   int iweight = pg[i-1].getWheight(); //當第n件物品重量小於包的重量時,分兩種情況,分別是裝第n件或不裝,比較取最大                        int ivalue = pg[i-1].getValue();                            bestValues[i][j] =                                 Math.max(bestValues[i-1][j], ivalue + bestValues[i-1][j-iweight]);          }}}}System.out.print(""+bestValues[pg.length][packageWheight]);}}public class Package {int value;int wheight;String name;Package(int value,int wheight,String name){this.value=value;this.wheight=wheight;this.name=name;}public int getWheight(){return wheight;}public int getValue(){return value;}public String getName(){return name;}}


有興趣的同學可以到我的github去clone這個工程:https://github.com/jimenbian/DynamicPrograme
引用:【1】http://blog.csdn.net/mu399/article/details/7722810
           【2】http://www.cnblogs.com/SDJL/archive/2008/08/22/1274312.html                            【3】http://blog.163.com/guixl_001/blog/static/41764104200863015855721/


/********************************

* 本文來自部落格  “李博Garvin“

* 轉載請標明出處:http://blog.csdn.net/buptgshengod

******************************************/


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.