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背包)相关推荐

  1. Python 0/1背包、动态规划

    参考:http://www.cnblogs.com/fcyworld/p/6243012.html Python 0/1背包.动态规划 0/1背包问题:在能承受一定重量的背包中,放入重量不同,价值不同 ...

  2. 动态规划算法初步(6)——0/1 背包

    动态规划算法初步(6) 例题五:0/1 背包(背包型) 题目: 一个旅行者有一个最多能装m公斤物品的背包,现在有n件物品,它们的重量分别是w1,w2,-,wn,它们的价值分别为c1,c2,-,cn.若 ...

  3. 动态规划(五)——0/1背包

    0/1背包 一.0/1背包问题 1.实例讲解 2.DP求解0/1背包 3.输出0/1背包方案 二.0/1背包题目代码(持续更新) 一.0/1背包问题 给定n种物品和一个背包,物品i的重量为wi,价值为 ...

  4. 动态规划问题之背包模型(18题)

    背包问题是动态规划问题的一大类型,下面我们对这个进行总结. 以 Acwing y中总结的 几个类型,我写了几个题解 应用知识点 01背包.完全背包 空间压缩的写法 多维费用的背包问题,以及状态的不同表 ...

  5. 【动态规划】多重背包

    问题 Q: [动态规划]多重背包 时间限制: 1 Sec  内存限制: 64 MB 提交: 112  解决: 49 [提交] [状态] [讨论版] [命题人:admin] 题目描述 张琪曼:" ...

  6. 代码随想录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.排列问题 ...

  7. 实验1动态规划——小明打王者

    实验1动态规划--小明打王者 问题: 小明想要在王者荣耀游戏里晋升一个段位,假设他一共需打了n场比赛,且必须成功赢得至少70%的场次才能成功晋升.假设每场比赛小明获胜的概率分别为p1,p2,-,pn, ...

  8. Python算法分析与设计实验:动态规划算法

    Python算法分析与设计实验:动态规划算法 一.实验目的 1.理解动态规划求解优化问题的典型步骤,以及动态规划算法求解计算问题的时间复杂度分析 2.熟练掌握利用动态规划算法求解一维.二维等典型优化问 ...

  9. c++ 动态规划-二维背包 and 潜水员问题

    动态规划 - 二维背包 1.普通二维(费用)背包 01背包问题:给定 n 种物品和一个重量(容量)(限定条件)为 w 的背包,物品 i 的重量是 wi,其价值为 vi.(每种物品只有一个)问:如何选择 ...

  10. 算法设计与分析 实验四 动态规划求解流水线问题

    动态规划求解流水线问题 一.实验目的与要求 1. 实验目的: 2. 实验亮点: 二.实验内容与方法 1. 实验内容: 2. 实验要求: 三.实验步骤与过程 (一)暴力穷举法 1.算法描述: 2.时间复 ...

最新文章

  1. java垃圾回收system_java应用性能调优之详解System的gc垃圾回收方法
  2. scrapy中的下载器中间件
  3. python学习笔记七
  4. 计算机网络(湖科大教书匠)
  5. jboss esb 学习笔记与html的传输,Jboss_ESB学习笔记1.doc
  6. Springcloud学习系列之Ribbon自定义负载均衡规则
  7. windows7系统安装中文语言包汉化问题
  8. 卸载ncurses_linux 安装,卸载 监控服务
  9. 一文了解无线网桥-小白笔记
  10. easypanel php.ini,虚拟主机控制面板(easypanel)下载_虚拟主机控制面板(easypanel)官方下载-太平洋下载中心...
  11. MySQL从删库到跑路(6):子查询
  12. Ubuntu设置扁平化风格桌面
  13. Android蓝牙开发前序知识-经典蓝牙低功耗蓝牙区别
  14. 还在为电脑装机而发愁吗?想摆脱装机时的捆绑软件吗?赶紧戳进来瞅瞅
  15. android拍照保存到系统相册,调用系统相机拍照,并且保存到系统相册的一般套路...
  16. linux下的pstack和gstack命令
  17. 按键精灵调用python插件_【Python 教程】使用 Python 和大漠插件进行文字识别
  18. idea 设置java内存_IDEA设置JVM可分配内存大小和其他参数的教程
  19. matlab灰度图像一致性校正方法
  20. 神经网络训练之数据归一化处理

热门文章

  1. [z]如何在一台windows主机上安装多个mysql服务
  2. jQuery动态设置输出窗口的高度
  3. VBA中访问Web Service
  4. discuz nt 安装,完全攻略。
  5. SQL Server 2005与2000写法上的差别
  6. 正序 逆序写 java_C語言版和JAVA版 把一個字節正序(高位在前)轉為逆序(低位在前) 和 逆序轉為正序...
  7. 饥荒机器人怎么用避雷针充电_新款iPhone充电线怎么这么好看~安卓也可以用!...
  8. java 获取 邮箱联系人_在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱...
  9. 四川大学计算机网络_四川大学20考研情况
  10. 【转载】spring framework体系结构详解