博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法数据结构Java实现】Java实现动态规划(背包问题)
阅读量:5927 次
发布时间:2019-06-19

本文共 1249 字,大约阅读时间需要 4 分钟。

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
有兴趣的同学可以到我的github去clone这个工程:
引用:【1】
           【2】
                 
           【3】

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

* 本文来自博客  “李博Garvin“

* 转载请标明出处:

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

你可能感兴趣的文章
我的友情链接
查看>>
惠普:继续衰败还是重振复兴?
查看>>
我的友情链接
查看>>
FastDFS安装扩展篇——安装PHP、Apache及Nginx的FastDFS扩展【所有fastdfs文档】
查看>>
对嵌入式限制的windows 7的一点思考及配置 (一)
查看>>
centos7.x之jenkins添加nodejs插件
查看>>
Cacti监控Apache
查看>>
Win7共享的设置
查看>>
windows server 2008 服务器DC备份和还原
查看>>
第11章 AWT编程
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
tomcat指南之jdk
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
Cocos2d-x开发中关于资源的预加载的一点补充
查看>>
CAS实现SSO单点登录原理
查看>>
Vant Weapp的dialog组件在mpvue小程序中使用注意事项
查看>>
Linux Postfix 全面安装指导手册之六
查看>>
Windows 10体验:IE界面
查看>>
Docker主机升级到4.9版本内核,使用Overlayfs取代Devicemapper
查看>>