package com.dynamic;/*** @Auther: 大哥的叔* @Date: 2019/8/20 19:36* @Description:*/
public class KnapsackProblem {public static void main(String[] args) {// TODO Auto-generated method stubint[] w = {1, 4, 3};//物品的重量int[] val = {1500, 3000, 2000}; //物品的价值 这里val[i] 就是前面讲的v[i]int m = 4; //背包的容量int n = val.length; //物品的个数//创建二维数组,//v[i][j] 表示在前i个物品中能够装入容量为j的背包中的最大价值int[][] v = new int[n+1][m+1];//为了记录放入商品的情况,我们定一个二维数组int[][] path = new int[n+1][m+1];//初始化第一行和第一列, 这里在本程序中,可以不去处理,因为默认就是0for(int i = 0; i < v.length; i++) {v[i][0] = 0; //将第一列设置为0}for(int i=0; i < v[0].length; i++) {v[0][i] = 0; //将第一行设置0}//根据前面得到公式来动态规划处理for(int i = 1; i < v.length; i++) { //不处理第一行 i是从1开始的for(int j=1; j < v[0].length; j++) {//不处理第一列, j是从1开始的//公式if(w[i-1]> j) { // 因为我们程序i 是从1开始的,因此原来公式中的 w[i] 修改成 w[i-1]v[i][j]=v[i-1][j];} else {//说明://因为我们的i 从1开始的, 因此公式需要调整成//v[i][j]=Math.max(v[i-1][j], val[i-1]+v[i-1][j-w[i-1]]);//v[i][j] = Math.max(v[i - 1][j], val[i - 1] + v[i - 1][j - w[i - 1]]);//为了记录商品存放到背包的情况,我们不能直接的使用上面的公式,需要使用if-else来体现公式if(v[i - 1][j] < val[i - 1] + v[i - 1][j - w[i - 1]]) {v[i][j] = val[i - 1] + v[i - 1][j - w[i - 1]];//把当前的情况记录到pathpath[i][j] = 1;} else {v[i][j] = v[i - 1][j];}}}}//输出一下v 看看目前的情况for(int i =0; i < v.length;i++) {for(int j = 0; j < v[i].length;j++) {System.out.print(v[i][j] + " ");}System.out.println();}System.out.println("============================");//输出最后我们是放入的哪些商品//遍历path, 这样输出会把所有的放入情况都得到, 其实我们只需要最后的放入
//      for(int i = 0; i < path.length; i++) {
//          for(int j=0; j < path[i].length; j++) {
//              if(path[i][j] == 1) {
//                  System.out.printf("第%d个商品放入到背包\n", i);
//              }
//          }
//      }int i = path.length - 1; //行的最大下标int j = path[0].length - 1;  //列的最大下标while(i > 0 && j > 0 ) { //从path的最后开始找if(path[i][j] == 1) {System.out.printf("第%d个商品放入到背包\n", i);j -= w[i-1]; //w[i-1]}i--;}}}

动态规划之零一背包问题相关推荐

  1. 变种 背包问题_动态规划入门——传说中的零一背包问题

    今天是周三算法与数据结构专题的第12篇文章,动态规划之零一背包问题.在之前的文章当中,我们一起探讨了二分.贪心.排序和搜索算法,今天我们来看另一个非常经典的算法--动态规划.在acm-icpc竞赛领域 ...

  2. 动态规划 之 零一背包

    动态规划中的零一背包问题是动规问题中十分典型且常见的一类问题,该类问题指的是:1.有一个容量为max_weight的背包和n个类型物品,每一种物品的质量为weight[i],价值为value[i](i ...

  3. 12 背包问题求具体方案(零一背包问题求具体方案)

    1. 问题描述: 有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次.第 i 件物品的体积是 vi,价值是 wi.求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大.输 ...

  4. 动态规划的用法——01背包问题

    动态规划的用法--01背包问题 问题主题:著名的01背包问题 问题描述: 有n个重量和价值分别为wi.vi的物品,现在要从这些物品中选出总重量不超过W的物品,求所有挑选方案中的价值最大值. 限制条件: ...

  5. 【动态规划】0/1背包问题

    问题 H: [动态规划]0/1背包问题 时间限制: 1 Sec  内存限制: 64 MB 提交: 152  解决: 95 [提交] [状态] [讨论版] [命题人:admin] 题目描述 张琪曼和李旭 ...

  6. 动态规划——物品无限的背包问题

    动态规划--物品无限的背包问题 物品无限的背包问题.有nn种物品,每种均有无穷多个.第i种物品的体积为ViV_i,重量为WiW_i.选一些物品装到一个容量为CC的背包中,使得背包内物品在总体积不超过C ...

  7. 【动态规划】P1048 01背包问题:采药

    时间对应容量,用01背包 [动态规划笔记]01背包问题及优化_m0_52043808的博客-CSDN博客 代码: #include<iostream> using namespace st ...

  8. vs2017\vs2019 动态规划算法实现0-1背包问题 C

    这是针对于博客vs2017安装和使用教程(详细)和vs2019安装和使用教程(详细)的动态规划算法实现0-1背包问题的示例 目录 一.问题描述

  9. 背包问题(1):关于零一背包问题的个人理解

    一.经典背包问题(零一背包) 给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高.问题的名称来源于如何选择最合适的物品放置于给定背包中.(每个物品只能 ...

最新文章

  1. Tomcat - ClassFormatException的解决方法
  2. ubuntu设置jupyter
  3. 算法提高 邮票面值设计 搜索 动态规划
  4. Js中Date的应用
  5. javascript 模板
  6. php 电脑的右下角弹框,电脑右下角弹出广告的解决方法
  7. python 科比投篮数据可视化及简单分析
  8. 在html css中加粗显示,HTML和CSS实现字体加粗的三种方法
  9. SMBMS项目(一)
  10. python关闭文件os_python_文件的打开和关闭
  11. 浏览器被恶意篡改(百分百成功)
  12. 华政全国计算机一级毕业,离校不离线 | 铛铛铛!毕业大佬返校宣讲会!
  13. 一次服务端大面积接口响应时间骤增问题排查
  14. 0002 c语言 字母排序
  15. C语言的 restrict 关键字的作用
  16. 大数据在线分析处理和常用工具
  17. Python Basic - python 文件对象的文件交互各类方法描述与实现
  18. 智能优化算法(源码)-沙丘猫群优化(SCSO)
  19. 华为低价策略将拿下C网招标30%最大份额
  20. 并不是只有 Redis 才可以做缓存

热门文章

  1. uni-app 使用html2canvas生成海报,一步到位
  2. ​经典算法09 堆排序
  3. 51单片机第一篇章-点亮LED
  4. RobustVideoMatting实时人像抠图实践
  5. int转String(精)
  6. 计算机二级怎么自学 学习方法有哪些
  7. 魔百盒CM101s-Hi3798MV100-nand-8233-当贝桌面卡刷强刷固件包
  8. Windows下使用iconv
  9. 雷蛇字体_Razer的zSilver游戏奖励是否值得?
  10. 1/1+1/3+1/5+……+1/99的和