实验3 动态规划(0/1背包)
1.问题给定的已知
N种物品和一个背包,物品的种类为wi,价值为vi,背包容量为C
2.所求目标
如何选择装入背包的物品,使得物品的总价值最大
3.数学模型
4.最优质子结构分析
现将问题分为n个子问题
(1)背包容量为c,从1号物品找出该问题的解
(2)背包容量为c,从1、2号物品找出该问题的解
(3)背包容量为c,从1、2、3号物品找出该问题的解
(4)背包容量为c,从1、2、3、4号物品找出该问题的解
……
(5)背包容量为c,从1、2、3、4、…N号物品找出该问题的解
5.建立最优值得递归关系式
递推式:M[i, j] = max{m[i+1,j],m(i-1,j-w[i])+v[i]}
边界条件:j>=w[i]
6.程序代码
public class Package01 {private int[][] nums;private int[] weight;private int[] value;int maxWeight;public Package01(int[] weight, int[] value, int maxWeight) {this.weight = weight;this.value = value;this.maxWeight = maxWeight;nums = new int[weight.length + 1][maxWeight + 1];}/*** i代表物品* j代表背包容量*/public void maxValue() {for (int i = 1; i <= weight.length; i++) {for (int j = 1; j <= maxWeight; j++) {if (j < weight[i - 1]) {nums[i][j] = nums[i - 1][j];} else {nums[i][j] = Math.max(nums[i - 1][j], nums[i - 1][j - weight[i - 1]] + value[i - 1]);}}}}public void print() {int i = nums.length;int j =nums[0].length;for (int k = 0; k < i; k++) {for (int s = 0; s < j; s++) {System.out.print(nums[k][s]+" ");}System.out.println();}}//测试public static void main(String[] args) {int[] weight = {1, 3, 4};int[] value = {1500, 2000, 3000};Package01 p = new Package01(weight, value, 4);p.maxValue();p.print();}}
7.测试数据
第一组:
第二组:
8.结果分析
测试结果正确
以上方法的时间和空间复杂度均为O(N*V)
实验3 动态规划(0/1背包)相关推荐
- Python 0/1背包、动态规划
参考:http://www.cnblogs.com/fcyworld/p/6243012.html Python 0/1背包.动态规划 0/1背包问题:在能承受一定重量的背包中,放入重量不同,价值不同 ...
- 动态规划算法初步(6)——0/1 背包
动态规划算法初步(6) 例题五:0/1 背包(背包型) 题目: 一个旅行者有一个最多能装m公斤物品的背包,现在有n件物品,它们的重量分别是w1,w2,-,wn,它们的价值分别为c1,c2,-,cn.若 ...
- 动态规划(五)——0/1背包
0/1背包 一.0/1背包问题 1.实例讲解 2.DP求解0/1背包 3.输出0/1背包方案 二.0/1背包题目代码(持续更新) 一.0/1背包问题 给定n种物品和一个背包,物品i的重量为wi,价值为 ...
- 动态规划问题之背包模型(18题)
背包问题是动态规划问题的一大类型,下面我们对这个进行总结. 以 Acwing y中总结的 几个类型,我写了几个题解 应用知识点 01背包.完全背包 空间压缩的写法 多维费用的背包问题,以及状态的不同表 ...
- 【动态规划】多重背包
问题 Q: [动态规划]多重背包 时间限制: 1 Sec 内存限制: 64 MB 提交: 112 解决: 49 [提交] [状态] [讨论版] [命题人:admin] 题目描述 张琪曼:" ...
- 代码随想录44——动态规划:完全背包理论基础、518零钱兑换II、377组合总和IV
文章目录 1.完全背包理论基础 2.518零钱兑换II 2.1.题目 2.2.解答 3.377组合总和IV 3.1.题目 3.2.解答 4.组合和排列问题的便利顺序 4.1.组合问题 4.2.排列问题 ...
- 实验1动态规划——小明打王者
实验1动态规划--小明打王者 问题: 小明想要在王者荣耀游戏里晋升一个段位,假设他一共需打了n场比赛,且必须成功赢得至少70%的场次才能成功晋升.假设每场比赛小明获胜的概率分别为p1,p2,-,pn, ...
- Python算法分析与设计实验:动态规划算法
Python算法分析与设计实验:动态规划算法 一.实验目的 1.理解动态规划求解优化问题的典型步骤,以及动态规划算法求解计算问题的时间复杂度分析 2.熟练掌握利用动态规划算法求解一维.二维等典型优化问 ...
- c++ 动态规划-二维背包 and 潜水员问题
动态规划 - 二维背包 1.普通二维(费用)背包 01背包问题:给定 n 种物品和一个重量(容量)(限定条件)为 w 的背包,物品 i 的重量是 wi,其价值为 vi.(每种物品只有一个)问:如何选择 ...
- 算法设计与分析 实验四 动态规划求解流水线问题
动态规划求解流水线问题 一.实验目的与要求 1. 实验目的: 2. 实验亮点: 二.实验内容与方法 1. 实验内容: 2. 实验要求: 三.实验步骤与过程 (一)暴力穷举法 1.算法描述: 2.时间复 ...
最新文章
- java垃圾回收system_java应用性能调优之详解System的gc垃圾回收方法
- scrapy中的下载器中间件
- python学习笔记七
- 计算机网络(湖科大教书匠)
- jboss esb 学习笔记与html的传输,Jboss_ESB学习笔记1.doc
- Springcloud学习系列之Ribbon自定义负载均衡规则
- windows7系统安装中文语言包汉化问题
- 卸载ncurses_linux 安装,卸载 监控服务
- 一文了解无线网桥-小白笔记
- easypanel php.ini,虚拟主机控制面板(easypanel)下载_虚拟主机控制面板(easypanel)官方下载-太平洋下载中心...
- MySQL从删库到跑路(6):子查询
- Ubuntu设置扁平化风格桌面
- Android蓝牙开发前序知识-经典蓝牙低功耗蓝牙区别
- 还在为电脑装机而发愁吗?想摆脱装机时的捆绑软件吗?赶紧戳进来瞅瞅
- android拍照保存到系统相册,调用系统相机拍照,并且保存到系统相册的一般套路...
- linux下的pstack和gstack命令
- 按键精灵调用python插件_【Python 教程】使用 Python 和大漠插件进行文字识别
- idea 设置java内存_IDEA设置JVM可分配内存大小和其他参数的教程
- matlab灰度图像一致性校正方法
- 神经网络训练之数据归一化处理
热门文章
- [z]如何在一台windows主机上安装多个mysql服务
- jQuery动态设置输出窗口的高度
- VBA中访问Web Service
- discuz nt 安装,完全攻略。
- SQL Server 2005与2000写法上的差别
- 正序 逆序写 java_C語言版和JAVA版 把一個字節正序(高位在前)轉為逆序(低位在前) 和 逆序轉為正序...
- 饥荒机器人怎么用避雷针充电_新款iPhone充电线怎么这么好看~安卓也可以用!...
- java 获取 邮箱联系人_在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱...
- 四川大学计算机网络_四川大学20考研情况
- 【转载】spring framework体系结构详解