自己百度搜的关于多重背包问题的java代码总是不合自己心意,所以自己来写一下:
多重背包问题涉及 :物品种类,背包限制,每种物品的重量,每种物品的数量,每种物品的价值。动态优化出最大价值。

贴代码(包括一维数组更新的方式,和二维dp矩阵的方式):


import java.util.Scanner;
//多重背包问题:
/**     输入:  2 101 1 11 1 1输出:    结果 2*/
public class 大疆2
{public static void main(String[] args){Scanner sc = new Scanner(System.in);while(sc.hasNext()) {int n = sc.nextInt();int t = sc.nextInt();int[] w = new int[n];int[] v = new int[n];int[] m = new int[n];for(int i = 0 ; i < n ; i++) {w[i] = sc.nextInt();v[i] = sc.nextInt();m[i] = sc.nextInt();}fun(n,t,w,v,m);fun2D(n,t,w,v,m);}}//n是种类,W是总的背包容量,w是每种商品的价格,m是每种商品有多少个,v是满意度,public static void fun(int n,int W,int[] w, int[] v,int[] m) {int[] dp = new int[W+1];for(int i = 0; i < n; i++)//n是物品的种类{for(int k =1; k <= m[i]; k++)//m[i]记录的是第i个物品的数量{for(int j = W; j >= w[i]; j--)//w[i]记录的是第i个物品的重量 W是背包的总容量{if(j >= k*w[i]) {dp[j] = Math.max(dp[j], dp[j - k*w[i]] + k*v[i]);//v[i]记录的是第i个物品的价值}}}}System.out.println("结果 "+dp[W]);}//n是种类,W是总的背包容量,w是每种商品的价格,m是每种商品有多少个,v是满意度(价值),public static void fun2D(int n,int W,int[] w, int[] v,int[] m) {int[][] dp = new int[n][W+1];//dp[i][j]表示的是使用0,1,...,i种商品,在总钱数为j的情况下的最大价值。//第一列全为0,不用再赋值//第一行for(int i = 1 ; i < W+1 ; i++)for(int k = 0 ; k <= m[0] ; k++) {if(i > k*m[0]) {dp[0][i] = k*v[0];}}//其他位置for(int i = 1; i < n ; i++) {for(int j = 1 ; j < W+1 ; j++) {dp[i][j] = dp[i-1][j];for(int k = 1 ; k <= m[i] ; k++) {if(j >= k*w[i]) {dp[i][j] = Math.max(dp[i][j],dp[i-1][j-k*w[i]]+k*v[i]);}}}}System.out.println("2D的结果: "+dp[n-1][W]);       }
}

java多重背包代码实现相关推荐

  1. java多重背包算法,【动态规划】多重背包问题

    说明 前面已经介绍完了01背包和完全背包,今天介绍最后一种背包问题--多重背包. 这个背包,听起来就很麻烦的样子.别慌,只要你理解了前面的两种背包问题,拿下多重背包简直小菜一碟. 如果没有看过前两篇0 ...

  2. java多重背包算法,01背包、完全背包和多重背包

    最优化原理 指的最优策略具有这样的性质:不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略. 如何证明一个最优策略的子策略也是最优解,一般使用反证法来证明. 无后效性 ...

  3. HDU2191 多重背包或者01背包 xingxing在努力

    珍惜现在, 感恩生活,记得汶川大地震那年我还在6年级, 当时以为是后面的同学在摇我的凳子, 几分钟后班里机智的同学才说地震了,大家赶快往楼下跑.这道题才让我真正理解了背包九讲前面讲解的东西, 题意就不 ...

  4. POJ - 2392 朴素多重背包 + 贪心 WA与AC代码细节分析

    我们先来看下普通的朴素多重背包(拆成01背包求解) n种物品,背包大小w,每种物品重量 wi,价值 vi,个数 ci dp[j] 表示 大小为 j 的背包含有的最大价值,即 物品重量和 小于等于 j ...

  5. 多重背包java版本实现_楼天城男人八题——POJ1742 Coins

    题目链接 传说中楼教主的做男人不易八题之一,这题多重背包应该算最简单的一道了 我AC的时候Users (Solved) 有3945了. 关于背包问题可以看 dd_engi 大牛的01背包.完全背包和多 ...

  6. Java解洛谷P6771 [USACO05MAR]Space Elevator 太空电梯,包含完整的多重背包状态转移方程,大量注释,通俗易懂

    01.题目及链接 题目链接:https://www.luogu.com.cn/problem/P6771 02.多重背包状态转移方程说明 了解多重背包 有 N 种物品和一个容量是 V 的背包,每种物品 ...

  7. 代码随想录算法训练营第四十六天|139.单词拆分、多重背包、背包问题总结篇

    一·.单词划分 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 分析如下: 动规五部曲分析如下: 1.确定dp数组以及 ...

  8. 代码随想录算法训练营第46天 | 动态规划 part08 ● 139.单词拆分 ● 关于多重背包 ● 背包问题总结篇

    #139 单词拆分 没做出来.我原来是把string放到dp里,不对,这种做法永远都不对.他问的是什么(能不能构成,true,false)就要放到dp里 (大部分题是这样)下面是不对的思路: 正确co ...

  9. HDU_多重背包系列

    HDU_2191 悼念512汶川大地震遇难同胞--珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/327 ...

最新文章

  1. 创建ogg文件 c语言,Ogg音频格式文件的样本构造(CVE-2018-5146)
  2. KaiOS 超越 iOS 成为印度第二大移动操作系统
  3. [转载].net 访问oracle的总结
  4. python自然语言处理书籍推荐-python自然语言处理
  5. win10 64 安装VSS2005报错,解决方法。
  6. Linux NB的单行命令
  7. Send data format set as XML
  8. jq监听子元素被点击_vue开发app点击字母展示地区列表(兄弟组件之间联动)
  9. Java并发编程实战~Copy-on-Write模式
  10. 列表解析(list comprehension) 与三目运算符
  11. 7 大版块 | 全面解读与认知支付系统
  12. linux有名管道 复用,Linux进程间通信(九)---综合实验之有名管道通信实验
  13. 10G网络布线方案有多少种?
  14. c语言中文网qq,c语言写的qq连看辅助
  15. jenkins 下载插件失败 有效的处理办法(亲测)
  16. 應用高解析度線掃描CCD於ITO導電玻璃表面瑕疵檢測之研究
  17. c++保留有效位和小数位
  18. 解决Windows服务器localhost可以访问,IP无法访问的问题
  19. Signing for ‘xxx‘ requires a development team.
  20. JS判断浏览器版本(已解决IE11版本为Mozilla问题)

热门文章

  1. PAT A1010 Radix +神
  2. dreamweaver如何连接mysql_Dreamweaver连接数据库教程(ASP类)
  3. MYSQL ‘S APPLY
  4. Kafka生产者ack和lag机制剖析
  5. 计算机科学导论的探讨论文,计算机科学导论论文.doc
  6. 需求分析之数据流图学习
  7. android 查看视频大小,android mediaplayer 视频修改视频大小 (屏幕尺寸mediaPlayer =......
  8. Handlebars的使用方法文档整理(Handlebars.js)
  9. 论文阅读——椭圆检测算法 2018 使用梯度分析利用错误检测控制的精确椭圆检测
  10. Armeria 小试牛刀