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,一经查实,立即删除!

相关文章

golang string转int8_golang 中string和int类型相互转换

Notepad&plus;&plus; 默认快捷键Notepad绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad默认的快捷键做个整理(其中有颜色的为常用招数): 1 ...DB2执行脚本经常会遇到数据库脚本放在.sql文件中,那么怎么去执…

java 第二天,Java复习第二天

1.idea里jar包和war的区别JAR(JAVA Archive 是类的归档文件)&#xff0c;JAR 文件不仅用于压缩和发布&#xff0c;而且还用于部署和封装库、组件和插件程序&#xff0c;并可被像编译器和 JVM 这样的工具直接使用。简单来说&#xff0c;jar包就像一个插件而且是打包已经写好的类…

qlistview 自定义控件_是否可以在QListView中添加自定义窗口小部件?

I have a large log data (100, 1000, 100000, ... records) and I want to visualize it in the following manner:Which widget (e.g. QListView, QListWidget) should I use and how, in order to stay away from performance and memory problems?解决方案Is it possible …

php 零宽断言,正则表达式之零宽断言实例详解

这篇文章主要介绍了正则表达式之零宽断言,简单介绍了零宽断言的概念、分类及php实现技巧与相关注意事项,需要的朋友可以参考下本文实例讲述了正则表达式之零宽断言。分享给大家供大家参考&#xff0c;具体如下&#xff1a;前言之前我曾写了一篇关于正则表达式的文章(http://www…

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)开发的…

ios 裁剪圆形头像_iOS开发之裁剪圆形头像

- (void)viewDidLoad {[super viewDidLoad];//加载图片UIImage *image [UIImage imageNamed:"菲哥"];//获取图片尺寸CGSize size image.size;//开启位图上下文UIGraphicsBeginImageContextWithOptions(size, NO, 0);//创建圆形路径UIBezierPath *path [UIBezierPa…

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

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

php函数方法,基于PHP函数的操作方法

如下所示&#xff1a;//简单函数function show(){echo "hello";}show();//有参数的函数function show($a){echo "$a";}show("world");//有返回值的函数function show(){return "小V&#xff0c;你好&#xff01;";}echo show();functi…

centos7安装php5.2yum源操作_Centos7.6使用yum安装PHP7.2

Centos7.6使用yum安装PHP7.21、安装源安装php72w&#xff0c;是需要配置额外的yum源地址的&#xff0c;否则会报错不能找到相关软件包。php高版本的yum源地址&#xff0c;有两部分&#xff0c;其中一部分是epel-release&#xff0c;另外一部分来自webtatic。如果跳过epel-relea…

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/…

php rewinddir(),PHP rewinddir() 函数 ——jQuery中文网

实例打开一个目录&#xff0c;列出其中的文件&#xff0c;充值目录句柄&#xff0c;重新列出其中的文件&#xff0c;然后关闭&#xff1a;$dir "/images/";// Open a directory, and read its contentsif(is_dir($dir)){if ($dh opendir($dir)){//List files in im…

汇编jnl_汇编指令集

1 X86和X87汇编指令大全(有注释)2 ---------- 一、数据传输指令 ----------------------------------------------------3 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.4 1. 通用数据传送指令.5 MOV 传送字或字节.6 MOVSX 先符号扩展,再传送.7 MOVZX 先零扩展,再传…

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所采用的都是光电屏幕指…

oracle数据库恢复参数文件位置,Oracle数据库的参数文件备份与恢复

Oracle数据库的参数文件包含两个文件:一个是spfile二进制文件名字为spfilesid.ora(其中sid你数据库的实例名称)。另一个是pfile文本文件的参数文件&#xff0c;名字为initsid.ora(其中sid你数据库的实例名称)。默认情况下数据库是只有一个参数文件的&#xff0c;那就是spfile,它…

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…

oracle cascade是什么意思啊,Oracle外键(Foreign Key)之级联删除(DELETE CASCADE)

什么是级联删除(DELETE CASCADE)&#xff1f;级联删除是指当主表(parent table)中的一条记录被删除&#xff0c;子表中关联的记录也相应的自动删除。备注&#xff1a;外键字段在该表中为主键的表&#xff0c;即为主表&#xff1b;外键字段在该表中为普通字段的表&#xff0c;即…

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

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

oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数

开篇一笑&#xff1a;高中的时候&#xff0c;自行车被偷&#xff0c;早上顺路搭同学的自行车。我坐在后座看到前面一大妈跑步&#xff0c;很猥琐的对同学说&#xff1a;“你看前面那个肥婆跑得屁股都甩圆了&#xff01;”这货沉默了一下。当我们和大妈擦身而过的时候&#xff0…

jquery手写轮播图_jquery 实现轮播图详解及实例代码_jquery_脚本之家

轮播图&#xff1a;接触jquery也有一段时间了&#xff0c;今天刚好利用轮播图来练练手。博文的前面会介绍一个简单用jquery做轮播图的例子&#xff0c;中间会插入一些关于轮播图更多的思考&#xff0c;在后面会用Javascript的方法来写一个轮播图&#xff0c;最后则是关于jquery…