iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Java背包问题求解实例代码
  • 683
分享到

Java背包问题求解实例代码

java背包问题ava 2023-05-30 23:05:12 683人浏览 八月长安
摘要

背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01背包和无限背包,这里主要讨论01背包,即每个物品最多放一个。而无限背包可以转化为01背包。先说一下算法的主要思想,利用动态规

背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01背包和无限背包,这里主要讨论01背包,即每个物品最多放一个。而无限背包可以转化为01背包。

先说一下算法的主要思想,利用动态规划来解决。每次遍历到的第i个物品,根据w[i]和v[i]来确定是否需要将该物品放入背包中。即对于给定的n个物品,设v[i]、w[i]分别为第i个物品的价值和重量,C为背包的容量。再令v[i][j]表示在前i个物品中能够装入容量为j的背包中的最大价值。则我们有下面的结果:

(1),v[i][0]=v[0][j]=0;
(2),v[i][j]=v[i-1][j] 当w[i]>j
(3),v[i][j]=max{v[i-1][j],v[i-1][j-w[i]]+v[i]} 当j>=w[i]

好的,我们的算法就是基于此三个结论式。

一、01背包:

1、二维数组法

public class sf {   public static void main(String[] args) {     // TODO Auto-generated method stub     int[] weight = {3,5,2,6,4}; //物品重量     int[] val = {4,4,3,5,3}; //物品价值     int m = 12; //背包容量     int n = val.length; //物品个数     int[][] f = new int[n+1][m+1]; //f[i][j]表示前i个物品能装入容量为j的背包中的最大价值     int[][] path = new int[n+1][m+1];     //初始化第一列和第一行     for(int i=0;i<f.length;i++){       f[i][0] = 0;     }     for(int i=0;i<f[0].length;i++){       f[0][i] = 0;     }     //通过公式迭代计算     for(int i=1;i<f.length;i++){       for(int j=1;j<f[0].length;j++){         if(weight[i-1]>j)           f[i][j] = f[i-1][j];         else{           if(f[i-1][j]<f[i-1][j-weight[i-1]]+val[i-1]){             f[i][j] = f[i-1][j-weight[i-1]]+val[i-1];             path[i][j] = 1;           }else{             f[i][j] = f[i-1][j];           }           //f[i][j] = Math.max(f[i-1][j], f[i-1][j-weight[i-1]]+val[i-1]);         }       }     }     for(int i=0;i<f.length;i++){       for(int j=0;j<f[0].length;j++){         System.out.print(f[i][j]+" ");       }       System.out.println();     }     int i=f.length-1;     int j=f[0].length-1;     while(i>0&&j>0){       if(path[i][j] == 1){         System.out.print("第"+i+"个物品装入 ");         j -= weight[i-1];       }       i--;     }   } } 

--结束END--

本文标题: Java背包问题求解实例代码

本文链接: https://www.lsjlt.com/news/222407.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java背包问题求解实例代码
    背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01背包和无限背包,这里主要讨论01背包,即每个物品最多放一个。而无限背包可以转化为01背包。先说一下算法的主要思想,利用动态规...
    99+
    2023-05-30
    java 背包问题 ava
  • 怎么用java解决背包问题
    背包问题是一个经典的组合优化问题,可以使用动态规划来解决。以下是使用Java语言解决背包问题的一个示例: public class ...
    99+
    2023-10-24
    java
  • Java实现动态规划背包问题
    目录前言一、原理1.1 最优子结构性质1.2 递归关系二、算法描述2.1 算法描述2.2 图解2.3 构造最优解三、 0 − 1 0-1 0−1 背包问题相关...
    99+
    2024-04-02
  • JavaSE求解汉诺塔问题的示例代码
    目录1.问题描述2.画图分析3.问题讲解  4.代码实现1.问题描述 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。 大梵...
    99+
    2024-04-02
  • Java编程用栈来求解汉诺塔问题的代码实例(非递归)
    【题目】   汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有N层的时候,打印最优移动过程和最优移动总步数。【解答】   上一篇用的是递归的方法解...
    99+
    2023-05-31
    java ava
  • java数据结构背包问题怎么解决
    背包问题是一个经典的动态规划问题,有多种解决方法。下面是一种常见的解决方案:1. 定义一个2维数组dp,其中dp[i][j]表示在前...
    99+
    2023-08-24
    java
  • Java编程之继承问题代码示例
    课堂练习:–在包bzu.aa中定义一个交通工具类(Vehicle):属性——载客量(capacity)方法(1)无参构造方法(给capacity初始化值为2,并输出“执行交通工具类的无参构造方法。”)(2)有参构造方法(传参给capacit...
    99+
    2023-05-30
    java 继承代码 ava
  • java背包问题动态规划算法分析
    背包问题 【题目描述】 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,…,WnW1,W2,…,Wn,它们的价值分别为C1,C2,…,C...
    99+
    2024-04-02
  • JAVA实现红包分发的示例代码
    大体思路 如果发总金额为 m的 n 个红包,先用一个长度为 n的临时数组 a 存放 n个随机双精度小数 ,然后用  sum表示数组 a 的和,每个红包的金额 代码 ...
    99+
    2024-04-02
  • Java使用动态规划算法思想解决背包问题
    目录动态规划算法动态规划算法的思想最优性原理动态规划算法的三大特点动态规划算法中的0/1背包问题动态规划算法的优点小结动态规划算法 动态规划算法的思想 动态规划算法处理的对象是多阶段...
    99+
    2024-04-02
  • Python算法题解:动态规划解0-1背包问题
    概述背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给...
    99+
    2023-06-02
  • 相邻节点迭代器(Java 实例代码源码包下载)
    目录   相邻节点迭代器 Java 实例代码 src/runoob/graph/DenseGraphIterater.java 文件代码: src/runoob/graph/SparseGraphIterater.java 文件代码:  ...
    99+
    2023-09-11
    java 数据结构
  • C语言数学问题与简单DP01背包问题详解
    目录数学买不到的数目蚂蚁感冒饮料换购简单DP01背包问题二维一维数学 顾名思义,数学类的题就是都可以用数学知识求解。 买不到的数目 这是第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛J...
    99+
    2024-04-02
  • Java求解二叉树的最近公共祖先实例代码
    一、题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是...
    99+
    2024-04-02
  • Java 限制前端重复请求的实例代码
    目录背景及用途实现步骤背景及用途 前端页面出现卡顿,用户反复点击操作按钮,导致后台接口短时间内多次提交 实现步骤 设置切面,增加注解,导致在规定时间内该接口不可重复调用 设置一个接口...
    99+
    2022-11-13
    Java 限制重复请求 Java重复请求
  • C++数据结构背包问题怎么解决
    在C++中,可以使用数组或者链表来实现背包问题的解决。 首先,定义一个结构体或者类来表示物品,包括物品的重量和价值等信息。 然后,定...
    99+
    2023-10-24
    C++
  • JavaScript闭包实例代码分析
    这篇文章主要介绍了JavaScript闭包实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript闭包实例代码分析文章都会有所收获,下面我们一起来看看吧。什么是闭包?闭包的概念是有很多版本...
    99+
    2023-07-05
  • C语言数学问题与简单DP背包问题怎么解决
    本篇内容介绍了“C语言数学问题与简单DP背包问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数学顾名思义,数学类的题就是都可以用数...
    99+
    2023-06-30
  • C++动态规划中关于背包问题讲解
    目录一、分割等和子集-最后一块石头的重量II二、目标和三、一和零四、零钱兑换II五、排列与组合组合总数IV(排列问题)零钱兑换(组合问题) 一、分割等和子集-最后一块石头的重量II ...
    99+
    2023-03-15
    C++动态规划背包问题 C++动态规划 C++背包问题
  • C语言动态规划之背包问题详解
    01背包问题        给定n种物品,和一个容量为C的背包,物品i的重量是w[i],其价值为v[i]。问如何选择装入背包的物品,使得装入背...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作