数学建模__动态规划

动态规划就是,将任务每一步均记录下来,以便将来重复使用时能够直接调用


问题描述:给定n个物品,每个物品的重量是Wi,价值是Vi,但是背包最多能装下capacity重量的物品,问我们如何选择才能利益最大化。


这里涉及到建模过程,本文章主要讲解代码实现,建模过程较为简略。


使用dp[i][j]来表示在容量为j的情况下,前i件物品的最大化利益。

情况一:放入第i件物品前,发现j<weight[i],因此dp[i][j]此时仍然是dp[i-1][j](也就是dp[i][j]没有发生变化)。
情况二:放入第i件物品时,发现j >= weight[i],此时你放入这件物品与否要看放进去以后利益是如何变化的。
①不放入,那么dp[i][j]的值还是dp[i-1][j]。
②放入,那么dp[i][j]的值是dp[i-1][j-weight[i]]+value[i]。(想一想对不对)

那么具体实现代码如下

weight = [1,2,5,6,7,9]
value = [1,6,18,22,28,36]num = 6
capicity = 13def fun(num, capicity, weight, value):#构造一个num+1行,capicity+1列的二维数组#便于下标从1开始使用dp = np.array([[0]*(capicity+1)]*(num+1))#dp[i][j]表示第前i件物品在容量为j下的最大价值#最终需要知道dp[num][capicity]也就是dp[6][13],在容量为13情况下前6件物品的最大价值是多少。#进一步的需要知道dp[][]for i in range(1,num+1):for j in range(1, capicity+1):if j >= weight[i-1]:dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i-1]]+price[i-1])else:dp[i][j] = dp[i-1][j]print(dp)fun(num, capicity, weight, value)

在这里插入图片描述
核心就在于这个动态转移方程。

d p [ i ] [ j ] = m a x { d p [ i − 1 ] [ j ] , d p [ i − 1 ] [ j − w e i g h t [ i ] ] + v a l u e [ i ] } dp[i][j] = max\{dp[i-1][j],dp[i-1][j-weight[i]]+value[i]\} dp[i][j]=max{dp[i1][j],dp[i1][jweight[i]]+value[i]}

虽写下这篇笔记,但有关动态规划的问题还需多多研究,加深理解。

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

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

相关文章

Oracle的 dblink 学习笔记

文章目录 一、基础环境二、适用场景三、过程和方法四、参考资料 版权声明&#xff1a;本文为CSDN博主「杨群」的原创文章&#xff0c;遵循 CC 4.0 BY-SA版权协议&#xff0c;于2023年9月10日首发于CSDN&#xff0c;转载请附上原文出处链接及本声明。 原文链接&#xff1a;http…

Python | 根据子列表中的第二个元素对列表进行排序

在本文中&#xff0c;我们将学习如何根据主列表中存在的子列表的第二个元素对任何列表进行排序。 比如 Input : [[‘rishav’, 10], [‘akash’, 5], [‘ram’, 20], [‘gaurav’, 15]] Output : [[‘akash’, 5], [‘rishav’, 10], [‘gaurav’, 15], [‘ram’, 20]] Input …

信息化发展47

需求分析 1 、软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。 2 、根据IEEE 的软件工程标准词汇表&#xff0c; 软件需求是指用户解决问题或达到目标所需的条件或能力&#xff0c; 是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的…

Spring Framework介绍

什么是Spring Framework&#xff1f; Spring Framework 是一个开源的、轻量级的应用程序开发框架&#xff0c;它提供了一系列的解决方案&#xff0c;用于构建企业级Java应用程序。Spring Framework基于IoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;和…

C#开发的OpenRA游戏之调试菜单1

C#开发的OpenRA游戏之调试菜单1 在开发一个游戏里,经常需要提供一些调试设置,以便快速地达到需要测试的阶段,否则按正常游戏的进程,就会需要比较久的时间,这样浪费开发人员的时间。 在OpenRA提供一个调试菜单,它就是在下面的界面里: 这个菜单叫做 Debug Menu,当玩家点…

抽象类和接口

目录 抽象类 接口 基本概念 多接口使用 为什么接口解决了Java的多继承问题&#xff1f; 接口的继承 克隆 Clonable接口 拷贝 Object类 抽象类 1.使用abstract修饰的方法称为抽象方法 2.使用abstract修饰的类称为抽象类 3.抽象类不可以被实例化 e.g.Shape shape ne…

ARMv7系统寄存器

本文档介绍 NEON 和 VFP 的系统寄存器,他们用于描述 NEON 和 VFP 的系统架构。包括:FPSCR, FPEXC, FPSID,MVFR0/1. 常见的术语 CPSR(Current Program Status Register)是 ARM 处理器中的一个寄存器,用于存储当前程序的状态信息。它包含了一些标志位,用于记录程序的运…

用户权限数据转换为用户组列表(3/3) - Excel PY公式

最近Excel圈里的大事情就是微软把PY塞进了Excel单元格&#xff0c;可以作为公式使用&#xff0c;轻松用PY做数据分析。系好安全带&#xff0c;老司机带你玩一把。 实例需求&#xff1a;如下是AD用户的列表,每个用户拥有该应用程序的只读或读写权限&#xff0c;现在需要创建新的…

QT之QLineEdit简介

QT之QLineEdit简介 QLineEdit 是 Qt 的一个类&#xff0c;用于创建和管理单行的文本输入框。以下是一些常用的 QLineEdit 函数和它们的用法&#xff1a; 1&#xff09;QLineEdit(QWidget *parent nullptr) 构造函数&#xff0c;创建一个新的 QLineEdit 对象。parent 参数是指…

【CSS】font-weight设置为500显示不出加粗效果

问题出在操作系统上&#xff1a; macOS 系统默认的华文黑体(STHeiti) 有七个矢量级别&#xff1a;Heavy/Bold/MediumP4/Regular/Thin/Light/UltraLightP2 &#xff0c;它包含上面 CSS 中设定的 500 这个精度。 Windows 系统默认的宋体(simsun) 没有那么多级别。在缺少级别支持…

23、mysql数据库的安装

&#xff08;无图&#xff0c;简易版本&#xff09; 一、下载 点开下面的链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 点击Download 就可以下载对应的安装包了 二、解压 下载完成后我们得到的是一个压缩包&#xff0c;将其解压&#xff0c;我们就可以得到MyS…

李开复:我家的AI是坠吼的

创新工场董事长、鸿海独立董事李开复&#xff0c;近日出席鸿海股东会暨媒体记者会时表示&#xff0c;人工智能&#xff08;AI&#xff09;是人类史上即将面临的最伟大技术革命&#xff0c;未来十年的改变将改写人类历史、重构所有产业&#xff0c;其发展大致可分三阶段&#xf…

Java 复习笔记 - 常见算法:排序算法

文章目录 概述一&#xff0c;冒泡排序&#xff08;一&#xff09;排序概述&#xff08;二&#xff09;排序原理&#xff08;三&#xff09;示例 二&#xff0c;选择排序&#xff08;一&#xff09;排序概述&#xff08;二&#xff09;排序原理&#xff08;三&#xff09;示例 三…

微服务保护-隔离

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

Linux学习第11天:字符设备驱动开发:一字一符总见情

本文是驱动开发的第一篇笔记。主要内容是字符设备驱动开发最基础的内容&#xff0c;主要包括字符设备的概念、开发步骤以及一个十分重要的概念&#xff1a;设备号。其思维导图能简单的显示本文的基本框架&#xff0c;如下&#xff1a; 一、字符设备 字符设备就是一个一个字节&a…

wifi密码破解

文章目录 前言一、破解原理二、配置环境三、运行测试四、资源自取 前言 本文基于 python 实现了破解 wifi 密码的功能&#xff0c;采用的破解方式是穷举法&#xff0c;效率相对来说很低&#xff0c;对于设置密码简单的路由器来说比较适用。 一、破解原理 程序主要采用 python…

上海交通大学生存手册

强烈建议去看看《上海交通大学生存手册》&#xff0c;内容可能有点长&#xff0c;但讲得很好&#xff0c;说出了大学教育的本质。如果几年前我能看到它&#xff0c;也许我的大学生活可能会不一样。 只是&#xff0c;没有如果。 那么我把这本手册推荐给正在上大学或者是将要上…

[字符串和内存函数]strcpy和strncpy的区别

CPlus中对strcpy的介绍 /* strcpy example */ #include <stdio.h> #include <string.h>int main () {char str1[]"Sample string";char str2[40];char str3[40];strcpy (str2,str1);strcpy (str3,"copy successful");printf ("str1: %s\n…

YOLO目标检测——棉花病虫害数据集+已标注txt格式标签下载分享

实际项目应用&#xff1a;目标检测棉花病虫害数据集的应用场景涵盖了棉花病虫害的识别与监测、研究与防治策略制定、农业智能决策支持以及农业教育和培训等领域。这些应用场景可以帮助农业从业者更好地管理棉花病虫害&#xff0c;提高棉花产量和质量&#xff0c;推动农业的可持…

Nginx和Tomcat负载均衡实现session共享

以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡&#xff0c;为了实现多个Tomcat之间的session共享&#xff0c;使用了开源的Memcached-Session-Manager框架。 此框架的优势&#xff1a; 1、支持Tomcat6和Tomcat7 2、操作粘性或不黏性Session 3、没有单点故障 4、T…