【算法数据结构Java实现】Java实现动态规划(背包问题)
来源:互联网 发布:淘宝助理菜鸟组件 编辑:程序博客网 时间:2024/06/05 14:27
1.背景
追随着buptwusuopu大神的脚步,最近在研习动态规划。动态规划应该叫一种解决问题的思想,记得又一次去某公司面试就被问到了这个。
多于动态规划的理解,大致是这样的,从空集合开始,每增加一个元素就求它的最优解,直到所有元素加进来,就得到了总的最优解。
比较典型的应用就是背包问题,有一个重量一定的包,有若干件物品,他们各自有不同的重量和价值,怎样背才能取得最大价值。
错误的理解:去价值/重量比最大的物品多装(之前我也是这么想的,但是在背包重量一定的情况下这么做并不合理,范例很容易想到)
2.题目
要实现的题目是摘抄于另一位大神的博客,讲的很好,可惜不是java实现的,有兴趣可以看下面的引用。
题目描述:
有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?
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
******************************************/
2 0
- 【算法数据结构Java实现】Java实现动态规划(背包问题)
- 动态规划算法0-1背包问题java实现
- 算法java实现--动态规划--0-1背包问题
- 背包问题动态规划算法java实现及分析
- 每天一道算法题(四) (动态规划算法)01背包问题Java实现
- 每天一道算法题(一) (动态规划算法)背包问题Java实现
- 动态规划求解背包问题(JAVA实现)
- 动态规划解决01背包问题(java实现)
- 动态规划算法分析及实例——求解完全背包问题(java实现)
- 《JAVA》中利用《动态规划》实现《背包》问题
- 动态规划之背包问题01--java实现
- 动态规划之背包问题——Java实现
- 动态规划之背包问题01——Java实现
- 动态规划之0/1背包问题-java实现
- 01背包-动态规划-Java实现
- 动态规划(背包问题,最长递增子序列,硬币问题)java实现
- 动态规划之背包问题(JAVA)
- java 动态规划 背包问题
- 【央行意外降准,今天怎么操作?】敦和投资徐小庆:股市确实有可能会高开低走
- C语言位域精解
- Kepler性能分析之M2E调优
- Linux时间子系统之二:表示时间的单位和结构
- Difference between Preference commit and apply
- 【算法数据结构Java实现】Java实现动态规划(背包问题)
- SQLServer2008只能编辑前面200行数据
- Java freemarker demo 【struts + freemarker】 自己修改的一个小例子
- 循环左移字符串
- Linux时间子系统之三:时间的维护者:timekeeper
- Position Bias Correction for Search Behavior Analysis
- cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'.
- handler机制原理全面整理
- C++输出有效数字位数