c++ 多重背包状态转移方程_Python|动态规划关于0-1背包问题

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云,作者:算法与编程之美

前言

对学算法的同学来说,动态规划是其必学且较为重要的问题之一;其中0-1背包问题是最经典的动态规划问题;本博客也主要以动态规划来解决0-1背包问题。

问题描述

有如下的背包的重量及其所对应的质量,背包的最大承受重量为6kg,试问要怎样装入才能使得背包再最大的承受重量的范围内装入的物品的质量最大?

7dd4a246ba01dc0d5b17ddd12c3cc2cf.png

动态规划进行问题分析

首先我们的创一个dp[i][j]的数组,bag[index]数组表示物品的重量与质量;

(bag[index][0]表示重量,bag[index][1]表示质量);其中的i来表示物品,j来表示当前背包所能承受的最大重量;dp[i][j]来表示当前背包重量为j时所能承装的最大质量,这时我们可以等到一个动态的转移方程:

dp

方程解析;当我们去遍历物品的时候我们会分两种情况,即装与不装;

不装入该物品:dp[i][j]的质量就是上个物品的质量,即就等于dp[i-1][j];i表示物品,就是i-1的质量。

装入该物品:dp[i-1][j-bag[index][0]]+bag[index][1],i表示当前的第i个物品,i-1表示上一个物品,因为j表示当前背包所能承装的最大质量,所以j-bag[index][0]表示若要装入物品,那么必须取上一个物品的背包最大容量(即第i-1个物品)为j-bag[index][0],因为这样装入第i个物品刚好装满容量为j的背包。

代码解决

bag, n, dp = [[6,3],[10,1],[5,2],[10,4]], 6, []# bag表示物品的重量与其所对应的质量,n为背包最大容量for i in range(len(bag)): dp.append([0]*(n+1))for i in range(n+1):    if i >= bag[0][1]: dp[0][i] = bag[0][0]    #第一次遍历数组将得到第一个物品所对应的最大质量得出for i in range(1,len(bag)):    for j in range(n+1):        if bag[i][1] <= j:            dp[i][j] = max(dp[i-1][j], dp[i-1][j-bag[i][1]]+bag[i][0])            # 取dp[i][j]当前的最大质量print(dp[-1][-1]) # 打印dp最终j=n(背包最大容量)的最大质量

总结

本博客主要讲述了如何用动态规划来解决0-1背包问题;总的来说,0-1背包问题就是经典的动态规划问题,用dp数组来记忆所需的值来推导相关联的下一个值即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element ui 多个子组件_vue前端UI框架,一点都不圆润,盘它!

面对众多vue前端UI框架&#xff0c;看着它们干干巴巴、麻麻赖赖的样子&#xff0c;一点都不圆润&#xff0c;跟我一起盘它&#xff01;Vue移动端UI框架1、Vux&#xff08;star:15620)VUX&#xff08;读音 [v’ju:z]&#xff0c;同 views&#xff09;是基于WeUI和Vue(2.x)开发的…

python 图像处理_Python中的十大图像处理工具

文章发布于公号【数智物语】 &#xff08;ID&#xff1a;decision_engine&#xff09;&#xff0c;关注公号不错过每一篇干货。来源 | 大数据文摘(BigDataDigest)编译 | 张秋玥、小七、蒋宝尚本文主要介绍了一些简单易懂最常用的 Python 图像处理库。当今世界充满了各种数据&am…

mysqlclient==1.3.7对应mysql版本_「MySQL」CentOs 7 下安装MySQL

MySQLMySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一YUM 安装mysql1、下载 YUM 仓库文件打开网址&#xff1a; https://dev.mysql.com/downloads/…

nginx log response_nginx优化配置大全

很多程序员面试被问到nginx优化做过哪些&#xff0c;因此来记录下配置文件样例为生产环境样例。1、nginx基本优化安装方式有2种&#xff1a;1、源码包安装 2、yum&#xff08;apt-get&#xff09;安装区别为如果用yum安装的话&#xff0c;很方便&#xff0c;并且基本不报错。如…

指纹对比软件_iQOO VS 小米9屏幕指纹大对决,这次我为vivo疯狂打Call!

在经历了性能、续航、充电的对比之后&#xff0c;我们今天带来了iQOO和小米9的屏幕指纹对比&#xff0c;看看两者在屏幕指纹方面究竟有何不同的表现。▼屏幕指纹原理目前屏幕指纹技术大致分为光电屏幕指纹和超声波屏幕指纹两种&#xff0c;而iQOO和小米9所采用的都是光电屏幕指…

python绘制3d坐标轴_matplotlib在python上绘制3D散点图实例详解

大家可以先参考官方演示文档&#xff1a; 效果图&#xff1a;3D scatterplotDemonstration of a basic scatterplot in 3D.from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np def randrange(n, vmin, vmax):Helper function to mak…

翻转链表python递归_Python实现链表反转的方法【迭代法与递归法】

导读 这篇文章主要介绍了Python实现链表反转的方法,结合实例形式分析了Python迭代法与递归法实现链表反转的相关操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Python实现链表反转的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; Python实现链表反转 …

python鸡兔同笼编程运行结果_Python少儿编程:鸡兔同笼

Python少儿编程&#xff1a;解决鸡兔同笼问题 一笼鸡和兔子&#xff0c;我们数了一下&#xff0c;咳咳&#xff0c;鸡和兔子的头一共有35个&#xff0c;但是鸡和兔子的脚一共有94只。 好的&#xff0c;那么吃货们我们来好好算一算&#xff0c;到底能做几只德州扒鸡和双流兔头呢…

keil debug如何在watch直接修改变量值_python日志记录系列教程,内置logging模块(一),直接使用logging模块的基础日志记录

前言&#xff1a;成熟的软件开发不可避免的要进行日志记录&#xff0c;python内置模块logging提供了强大的日志记录能力&#xff0c;本文将从多个角度&#xff0c;由浅入深的介绍logging的常见使用方法和一些基本概念&#xff0c;本此系列文章分为两篇&#xff0c;本文为系列文…

linux进程管理子系统分析,linux进程管理子系统简要分析

Linux进程管理&#xff1a;进程与程序&#xff1a;程序&#xff1a;存放在磁盘上的一系列代码和数据的可执行映像&#xff0c;是一个静止的实体。进程&#xff1a;是一个执行中的程序&#xff0c;它是动态的实体进程四要素&#xff1a;1. 有一段程序供其执行&#xff0c;这段程…

c语言变量命名规则_带你学习C语言—变量

在编写程序时&#xff0c;常常需要将数据存储在内存中&#xff0c;以便于使用这个数据或者修改这个数据的值。我们通常使用变量来存储数据&#xff0c;而且使用变量可以引用存储在内存中的数据&#xff0c;并随时根据需要对数据进行处理。变量的概念在程序设计中&#xff0c;允…

html缩进快捷键_Windows IDEA 快捷键终极大全,果断收藏!

作者&#xff1a;JaJian出处&#xff1a;https://www.cnblogs.com/jajian/p/8012603.html话说IDEA对新手来说难&#xff0c;可能其中一个原因就是快捷键组合多而且复杂但是它也很全&#xff0c;基本所有功能都可以通过快捷键来完成&#xff0c;可以这么说&#xff0c;如果你掌握…

安装quartus时弹出错误_Win10 安装arcgis10.2 for desktop需要.net framework 解决方案

有效解决“Win10 安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境”。台式电脑新装了系统&#xff0c;重新安装arcgis 10.2时弹出“安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境 ”。在网上百度了很多的相关知识&#…

下面哪个字段是http请求中必须具备的_HTTP 协议报文结构及示例

HTTP 基本架构下面我们用一张简单的流程图来展示 HTTP 协议基本架构&#xff0c;以便大家先有个基本的了解Web Client 可以是浏览器、搜索引擎、机器人等等一切基于HTTP 协议发起 http 请求的工具。Web Server 可以是任何的能解析 HTTP 请求&#xff0c;并返回给Web Client 可识…

文件名为空linux,文件系统:隐匿在Linux背后的机制

原标题&#xff1a;文件系统&#xff1a;隐匿在Linux背后的机制在 Linux 中&#xff0c;最直观、最可见的部分就是 文件系统(file system) 。下面我们就来一起探讨一下关于 Linux 中国的文件系统&#xff0c;系统调用以及文件系统实现背后的原理和思想。这些思想中有一些来源于…

docker安装elasticsearch_Elasticsearch amp; Kibana 部署安装 (Docker)

为什么要使用 Docker来部署 Elasticsearch 和 Kibana 呢&#xff0c;传统使用软件在操作系统上安装和配置的方法过于繁琐&#xff0c;并且受一些跨平台的约束&#xff0c;例如Mac、Windows、Linux等&#xff0c;所以无论安装什么软件&#xff0c;通过 Docker 进行部署是最为简单…

mfc 对话框透明 控件不透明_你不知道的丨透明胶用法

家家都有的透明胶带&#xff0c;而它的作用不仅仅是用来粘东西。别看它是这么小小一块&#xff0c;可是作用却很多。平时我们穿的衣服&#xff0c;裤子难免会粘上些毛。在我们紧急出门的时候&#xff0c;突然发现衣服粘有毛&#xff0c;这时候我们的透明胶就派上用场了。用透明…

python partial_Python--并行计算框架(pathos)

​应用python进行数据挖掘或计算时&#xff0c;往往需要遍历多种参数进行数据建模&#xff0c;而单次的建模或计算有时候非常耗时&#xff0c;这时候可以利用python的并行计算功能&#xff0c;加快计算速度。python能够应用并行计算的模块有多个multiprocessing、pathos等。其中…

endnote怎么改成中文版_毕业论文面对大量的参考文献标注,应该怎么办?(便捷整理的技巧和方法)...

毕业论文不同于一般的小论文&#xff0c;特别是硕士毕业论文或者博士毕业论文。一般的小论文就四五页&#xff0c;而硕士论文动辄五六十页&#xff0c;有的甚至七八十页&#xff0c;因此有些东西如果要人工的去修改&#xff0c;将是一件非常痛苦的事情&#xff0c;比如目录自动…

怎么创建数据表的实体类和业务类_微服务项目第13天:商品分类业务的实现

今天是刘小爱自学Java的第143天。感谢你的观看&#xff0c;谢谢你。学习计划安排如下&#xff1a;商品分类业务的初步实现。数据模型的分析&#xff1a;数据表字段的设计&#xff0c;Java中对应的实体类&#xff0c;前端页面vue组件。业务模型的分析&#xff1a;请求路径是什么…