动态规划-背包问题 分析+代码

这里写自定义目录标题

  • 介绍背包问题
  • 过程分析
  • 例题
    • 题目说明
    • 代码
    • 输出结果

介绍背包问题

  • 背景:在现实生活中,我们常常会面临需要在有限空间内做出最优选择的情况,比如旅行时需要选择携带哪些物品,或者在资源有限的情况下选择最有利可图的投资项目。而背包问题就是这样一类经典的组合优化问题,在计算机科学和算法设计领域具有重要的研究价值和应用意义。

  • 描述:背包问题是指给定一个容量为W的背包和一组物品,每个物品有自己的重量和价值。需要从这组物品中选择一些放入背包中,使得放入背包的物品总价值最大化,同时不能超过背包的容量。这个问题可以分为两种常见形式:0-1背包问题和完全背包问题。

过程分析

解决背包问题的常见方法是使用动态规划。具体过程如下:

  • 定义状态:使用一个二维数组dp[i][j]表示前i个物品放入容量为j的背包中所能获得的最大价值。
  • 状态转移方程:根据题目要求,推导出状态转移方程,通常分为当前物品放入背包和不放入背包两种情况。
  • 边界条件:初始化边界条件,通常第0行和第0列为0。
  • 递推计算:根据状态转移方程,逐步填充dp数组。
  • 返回结果:最终dp数组右下角的值即为所求的最大总价值。

例题

题目说明

  • 背包问题:有一个背包,容量为4磅,现有如下物品
    在这里插入图片描述
    1. 要求达到的目标为装入的背包的总价值最大,并且重量不超出
    1. 要求装入的物品不能重复
    1. 背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01 背包和完全背包
      (完全背包指的是:每种物品都有无限件可用)
    1. 这里的问题属于01背包,即每个物品最多放一个。而无限背包可以转化为01背包。
    1. 算法的主要思想,利用动态规划来解决。每次遍历到的第i个物品,根据w[i]和 v[i]来确定是否需要将该物品
  • 放入背包中。即对于给定的n个物品,设v[i]、w[i]分别为第i个物品的价值和重量,C为背包的容量。再令v[i][j]
    表示在前i个物品中能够装入容量为j的背包中的最大价值。则我们有下面的结果:
    在这里插入图片描述
  • 图片:
    -在这里插入图片描述

代码

public class dongTaiGuiHua {
    public static void main(String[] args) {
        int[] w = {1,4,3};
        int[] val = {1500,3000,2000};
        int m = 4 ; //背包容量
        int n = val.length; //物品个数

        //表示最大的价值
        int[][] v = new int[ n+ 1][m + 1];

        //初始化第一行
        for (int i = 0; i < m + 1; i++) {
            v[0][i] = 0;
        }
        //初始化第一列
        for (int i = 0; i < n + 1; i++) {
            v[i][0] = 0;
        }

        //遍历展示
        for (int i = 0; i < n + 1; i++) {
            for (int j = 0; j < m + 1; j++) {
                System.out.print(v[i][j] + " ");
            }
            System.out.println();
        }

        //赋值
        for (int i = 1; i < v.length; i++) { // 物品
            for (int j = 1; j < v[0].length; j++) {//重量
                if (j < w[i - 1]){
                    v[i][j] = v[i - 1][j];
                }
                if (j >= w[i - 1]){
                    v[i][j] =  Math.max( v[i - 1][j],val[i - 1] + v[i - 1][j - w[i - 1]]);
                }
            }
        }


        System.out.println(" --------------------");
        //遍历展示
        for (int i = 0; i < n + 1; i++) {
            for (int j = 0; j < m + 1; j++) {
                System.out.print(v[i][j] + " ");
            }
            System.out.println();
        }

    }
}

输出结果

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
 --------------------
0 0 0 0 0 
0 1500 1500 1500 1500 
0 1500 1500 1500 3000 
0 1500 1500 2000 3500 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/447791.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EASY-LASER激光对中仪维修E710镭射仪联轴器维修

Easy-Laser激光对中仪维修常见故障&#xff1a;触摸屏损坏&#xff08;屏碎&#xff0c;不显示&#xff0c;黑屏&#xff0c;蓝屏&#xff0c;无背光等&#xff09;&#xff0c;对中仪电路板损坏&#xff0c;对中仪接收装置电路板维修&#xff0c;对中仪发射控制装置电路板等均…

CubeMX使用教程(2)——如何点亮LED

在上一章&#xff0c;我们完成了CubeMX的环境配置&#xff0c;这一章我们通过CubeMX来完成点亮LED的工作。 通过LED原理图可知&#xff0c;如果我们要点亮LD1&#xff08;第一个灯&#xff09;&#xff0c;它对应开发板的PC8端口&#xff0c;因此我们应该在CubeMX中将PC8配置为…

OpenCV实战--人脸跟踪(级联分类器)

1、前言 人脸识别是基于人的脸部特征信息进行身份识别的--种生物识别技术,也是计算机视觉重点发展的技术。 机械学习算法诞生之后,计算机可以通过摄像头等输入设备自动分析图像中包含的内容信息,随着技术的不断发展,现在已经有了多种人脸识别的算法。 人脸跟踪是让计算机…

Java 语言“编译与解释并存”

程序语言的执行方式 将高级编程语言按照程序的执行方式分为两种&#xff1a; 编译型&#xff1a;编译型语言open in new window 会通过编译器open in new window将源代码一次性翻译成可被该平台执行的机器码。一般情况下&#xff0c;编译语言的执行速度比较快&#xff0c;开发…

微信jssdk获取定位计算距离

微信网页jssdk开发文档获取地理位置接口文档&#xff1a;https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#36 实现&#xff1a; const wx require(weixin-js-sdk) const jsApiList [ getLocation ]/*** 获取定位* param {*} configData 接口获取*…

云流化技术方案的优势

数字化的时代&#xff0c;许多新兴的技术都逐渐走进人们的视野&#xff0c;云流化作为一种新兴的技术在各个领域发挥着越来越重要的作用&#xff0c;也为我们带来了方便快捷的使用体验&#xff0c;尤其是在虚拟仿真和数字孪生领域&#xff0c;但是有的人可能听到这个词会比较陌…

armv8/armv9不同特权程序之间的跳转模型

目录 1、前言2、4个特权等级/4个安全状态之间的跳转模型3、启动时镜像之间的跳转模型4、runtime程序之间的跳转模型推荐 本文转自 周贺贺&#xff0c;baron&#xff0c;代码改变世界ctw&#xff0c;Arm精选&#xff0c; armv8/armv9&#xff0c;trustzone/tee&#xff0c;secur…

第二证券:金价创出历史新高 黄金主题类基金“熠熠闪光”

2024年3月以来&#xff0c;黄金价格走出了一轮波澜壮阔的行情。上海黄金&#xff08;SHFE黄金&#xff09;接连8日收涨&#xff0c;累计涨幅近6%&#xff0c;3月9日夜盘创出511.66元/克的前史最高价&#xff0c;最新收盘价为509.32元/克&#xff0c;相同是前史新高。 国际金价…

福州景湖佳园120平现代风格装修,简洁有层次。福州中宅装饰,福州装修

在现代风格的装修设计中&#xff0c;配色方案是决定整体氛围的关键因素。以福州景湖佳园的120平米装修案例为例&#xff0c;设计师巧妙地运用了灰、白、蓝三种颜色&#xff0c;打造出了一处既简洁又富有层次感的居住空间。 首先&#xff0c;灰色是现代风格中非常常见的一种色彩…

C++:继承与派生

为什么会有继承这样的语法呢&#xff1f;&#xff1f;试想这样一个场景&#xff1a;假设我们这个App需要去获取不同类型用户的数据&#xff0c;并进行分类&#xff0c;那么就需要我们去写对应不同的类&#xff0c;比如说学生、老师、军人、公司职工…………每个类都需要有名字、…

Python从0到100(三):Python中的变量介绍

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

四川易点慧电子商务有限公司抖音小店安全正规

在如今网络购物日益普及的时代&#xff0c;消费者对于购物平台的选择越来越挑剔。四川易点慧电子商务有限公司抖音小店以其安全正规的经营模式&#xff0c;赢得了广大消费者的信赖和好评。本文将为您详细介绍四川易点慧电子商务有限公司抖音小店的优势和特点&#xff0c;让您在…

windows下pytorch的dataloader多进程(num_workers)问题,为何num_workers的值只能为0?

问题背景介绍 本人是windows系统&#xff0c;在使用torch.utils.data.Dataloader加载torchvision中的数据集时&#xff0c;将其中的形参num_workers设置为了大于0的数&#xff0c;然后出现以下错误。 原因 在 Windows 系统下&#xff0c;num_workers 参数在使用 PyTorch 的 t…

内部文档多维保密,如何做好内部文件的保密措施?

在企业的日常运营中&#xff0c;内部文档往往包含了公司的核心战略、财务数据、客户信息等重要内容。一旦这些文件泄露&#xff0c;可能会给企业带来无法估量的损失。 因此&#xff0c;做好内部文件的保密措施显得尤为关键。 这里有一件真实的案例可以参考一下。 某大型制造企…

网红老阳分享的蓝海赚钱项目,这三个真香!

在互联网经济飞速发展的当下&#xff0c;寻找蓝海项目成为了许多创业者和投资者的首要任务。近期&#xff0c;知名网红老阳分享了一些他认为具有巨大潜力的蓝海项目&#xff0c;其中包括RPO人力资源、视频号带货和Temu跨境电商。下面我们将对这三个项目进行详细解析。 老阳分享…

照明灯十大知名品牌排行榜,前十名护眼台灯推荐

孩子们在学习时&#xff0c;良好的光线至关重要&#xff0c;因此&#xff0c;护眼台灯成为了许多家庭的首选。尽管人们对于护眼台灯的使用效果持有不同观点&#xff0c;但我多年来的使用体验证明&#xff0c;护眼台灯在保护视力、减轻眼睛疲劳方面发挥着不可或缺的作用&#xf…

C++ Qt学习——Qt启动流程

目录 1、点击文件&#xff0c;新建文件或项目 2、选择模板为Application&#xff08;Qt&#xff09;&#xff0c;Qt Qwidgets Application,再点击Choose ​编辑 3、给自己的文件起个名字 4、点击下一步 5、点击下一步 6、点击下一步 7、点击下一步 8、点击完成 9、直接…

应用方案 |安防摄像头(IPC)的步进马达及IR-CUT驱动芯片D6212

应用领域 安防摄像头&#xff08;IPC&#xff09;的步进马达及IR-CUT驱动。 02 功能介绍 D6212内置8路带有续流二极管的达林顿驱动管阵列和一个H桥驱动&#xff0c;单芯片即可实现2个步进电机和一个IR-CUT的直接驱动&#xff0c;使得电路应用非常简单。单个达林顿管在输入…

Verovio简介及在Windows10和Ubuntu 22.04上编译过程

Verovio是一个快速、便携、轻量级的开源库&#xff0c;用于将音乐编码倡议(Music Encoding Initiative(MEI))数字乐谱雕刻到SVG图像中。Verovio还包含即时转换器(on-the-fly converters)用于渲染Plaine & Easie Code、Humdrum、Musedata、MusicXML、EsAC和ABC数字乐谱。源代…

【Loss总结】适用与弱监督语义分割中的各类loss

【Loss总结】适用与弱监督语义分割中的各类loss 文章目录 【Loss总结】适用与弱监督语义分割中的各类loss交叉熵损失相对熵&#xff08;KL散度&#xff09;交叉熵 L1 LossL2LossSmoothL1LossDice loss梯度分析语义分割代码 交叉熵损失 交叉熵损失函数(CrossEntropy Loss)&…