【动态规划】【背包问题】

1.确定dp数组含义,初始化

2.确定遍历顺序

3.确定dp公式

‘’‘’
0-1背包问题,可以分为二维dp和一维dp
有两种状态,当前物品放还是不放入背包
0-1背包,物品只能放一次,因此一维dp要考虑遍历顺序
‘’’

class solution:def bag2d(self,weight,value,bagweight):# dp[i][j]选0-i个物品,容量为j时候的价值dp=[[0]*(bagweight+1) for _ in range(len(value))]# 一般二维dp初始化都是遍历进行for j in range(weight[0],bagweight+1):dp[0][j]=value[0]for i in range(len(value)):for j in range(bagweight+1):# 遇到一个物品时,判断放还是不放if weight[i]>j:dp[i][j]=dp[i-1][j]else:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])return dp[len(weight)][bagweight-1]def bag1d(self,weight,value,bagWeight):# 倒序遍历dp = [0] * (bagWeight + 1)for i in range(len(weight)):  # 遍历物品for j in range(bagWeight, weight[i] - 1, -1):  # 遍历背包容量dp[j] = max(dp[j], dp[j - weight[i]] + value[i])return dp[bagWeight]

分割等和子集问题

如果整体的元素总和都不可分,那肯定不可分

‘’’
背包的体积为sum / 2
背包要放入的商品(集合里的元素)重量为 元素的数值,价值也为元素的数值
背包如果正好装满,说明找到了总和为 sum / 2 的子集。
背包中每一个元素是不可重复放入。

‘’’

class Solution:def canPartition(self, nums: List[int]) -> bool:_sum = 0# dp[i]中的i表示背包内总和# 题目中说:每个数组中的元素不会超过 100,数组的大小不会超过 200# 总和不会大于20000,背包最大只需要其中一半,所以10001大小就可以了dp = [0] * 10001for num in nums:_sum += num# 也可以使用内置函数一步求和# _sum = sum(nums)if _sum % 2 == 1:return Falsetarget = _sum // 2# 开始 0-1背包for num in nums:for j in range(target, num - 1, -1):  # 每一个元素一定是不可重复放入,所以从大到小遍历dp[j] = max(dp[j], dp[j - num] + num)# 集合中的元素正好可以凑成总和targetif dp[target] == target:return True

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

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

相关文章

后端返回树结构

出参结构 Getter Setter public class TreeResponse implements Serializable {// 主键private Long id;// 父级节点private Long parentId;// 层级private Byte layer;// 编码private String docCode;// 名称private String docName;// 子节点private List<TreeResponse&g…

yolov5 获取错误样本

yolov5根据把预测错误的样本找出来,并把预测结果打印出来,输出图片 标注时,标注的结果就显示出来了,红框是预测的结果,其他颜色是标注的结果,可以根据结果对比进行调整标注。 注意:标注时独立的json文件格式 batch_mouse_ok.py """ Usage:$ python pa…

如何安装MacOS的虚拟机?mac安装虚拟机的步骤 虚拟机安装MacOS VMware Fusion和Parallels Desktop19

要在Mac上运行MacOS的虚拟机&#xff0c;常用的方法是使用虚拟化软件如VMware Fusion或Parallels Desktop。 以下是安装MacOS的虚拟机的主要步骤&#xff1a; 1. 检查系统要求&#xff1a;确定您的Mac硬件和操作系统满足安装要求。您需要一台具备足够性能的Mac&#xff0c;并…

223 基于matlab的结构有限元分析

基于matlab的结构有限元分析。包括基于4节点四面体单元的空间块体分析、基于4节点四边形单元的矩形薄板分析、基于3节点三角形单元的矩形薄板分析、三梁平面框架结构的有限元分析、四杆桁架结构的有限元分析、基于8节点六面体单元的空间块体分析。每个程序都要相应的文档说明。…

设计模式之策略模式例题:根据用户等级算积分的接口

问题 问题&#xff1a;写一个根据游戏用户等级来送赠送积分的方法接口&#xff0c;一共有100个等级&#xff0c;每种等级都有一个方法&#xff0c;使用策略模式。 在设计一个根据游戏用户等级来赠送积分的接口时&#xff0c;我们需要考虑几个关键点&#xff1a; 解决 性能&a…

spring-cloud-alibaba微服务Sentinel

Sentinel 官方网站 sentinel-dashboard-1.8.7.jar包下载地址 在window通过命令行启动&#xff08;java -Dserver.port8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.7.jar&#xff09;&#xff0c;可以通过 -Dserver.port修改控制台的端口 使用的版本最好…

CentOS7.9.2009安装配置logstash7.11.1

本文章使用CentOS7.9.2009服务器以root用户安装配置logstash7.11.1软件 1.服务器信息 [root@elasticsearch ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@elasticsearch ~]# 2.logstash安装配置 --> 上传logstash7.11.1版本至CentOS7.9.200…

【设计模式】4、prototype 原型模式

四、prototype 原型模式 https://refactoringguru.cn/design-patterns/prototype 如果希望 复制对象, 可使用 “prototype 模式” 如果 “待复制的对象” 是 interface 而不是 class, 或者如果 class 有 private 变量时. 无法知道 "待复制的对象"的细节, 则需要其…

Python 全栈 Web 应用模板:成熟架构,急速开发 | 开源日报 No.223

tiangolo/full-stack-fastapi-template Stars: 15.6k License: MIT full-stack-fastapi-template 是一个现代化的全栈 Web 应用模板。 使用 FastAPI 构建 Python 后端 API。使用 SQLModel 进行 Python SQL 数据库交互&#xff08;ORM&#xff09;。Pydantic 用于数据验证和设…

Linux目录和文件管理

Linux 目录结构 是树形结构&#xff0c;默认是以 根目录 / 为所有文件、目录的起点 目录介绍/root 超级用户(系统管理员)的主目录(特权阶级)/home存放所有用户文件的根目录&#xff0c;是用户主目录的基点&#xff0c;比如用户user的主目录就是/home/user&#xff0c;可以…

ARM的TrustZone技术

ARM的TrustZone技术是一种系统范围的安全解决方案&#xff0c;旨在为高性能计算平台上的各种应用提供保护&#xff0c;如安全支付、数字版权管理、企业服务和基于Web的服务。其核心原理是通过硬件级别的隔离和保护来增强系统的安全性。 工作原理 TrustZone技术通过在ARM架构中…

NODE MCU (ESP8285-ESP8266)用Arduino lDE 2.3.2烧录系统后串口监控不打印问题

问题: Arduino lDE 2.3.2,集合DOIT ESP-Mx DevKit板子,烧录代码后,串口监视器 打印不出来调试数据 分析: Arduino lDE 2.3.2工具提示,不支持调试 板载flash按钮无需按下,即可烧录系统,由于烧录和调试共用串口,所以怀疑是Arduino lDE 2.3.2在烧录时设置了串口的配置…

YOLTV8 — 大尺度图像目标检测框架(欢迎star)

YOLTV8 — 大尺度图像目标检测框架【ABCnutter/YOLTV8: &#x1f680;】 针对大尺度图像&#xff08;如遥感影像、大尺度工业检测图像等&#xff09;&#xff0c;由于设备的限制&#xff0c;无法利用图像直接进行模型训练。将图像裁剪至小尺度进行训练&#xff0c;再将训练结果…

C语言--内存函数

1.memcmp使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从 source 的位置开始向后 复制num个 字节的数据到 destination 指向的内存位置。 这个函数在遇到 \0 的时候并 不会停下来 。 如果source和destination有任何…

Echarts简单的多表联动效果和添加水印和按钮切换数据效果

多表联动 多表联动效果指的是在多个表格之间建立一种交互关系&#xff0c;以便它们之间的操作或选择能够相互影响。通常情况下&#xff0c;多表联动效果可以通过以下方式之一实现&#xff1a; 数据关联&#xff1a; 当在一个表格中选择或操作某些数据时&#xff0c;另一个表格…

练习4-11 统计素数并求和

本题要求统计给定整数M和N区间内素数的个数并对它们求和。 输入格式: 输入在一行中给出两个正整数M和N&#xff08;1≤M≤N≤500&#xff09;。 输出格式: 在一行中顺序输出M和N区间内素数的个数以及它们的和&#xff0c;数字间以空格分隔。 输入样例: 10 31输出样例: 7…

java数据结构与算法刷题-----LeetCode476. 数字的补数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 位运算&#xff1a;取出非前导0位标1&#xff0c;进行异或2. …

Hadoop 3.1.3

第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史&#xff08;了解&#xff09; 1.3 Hadoop三大发行版本&#xff08;了解&#xff09; Hadoop三大发行版本&#xff1a;Apache、Cloudera、Hortonworks。 Apache版本最原始&#xff08;最基础&#xff09;的版本&#x…

HTML基本语法

前言&#xff1a; html中不区分大小写&#xff0c;但建议用小写&#xff0c;因为使用组件时一般使用大写&#xff0c;便于区分两者 注释&#xff1a; <!-- 注释的内容 --> ~注释的内容只会显示在源码当中&#xff0c;不会显示在网页中 ~用于解释说明代码&#xff0c;或隐…

Unity 2D让相机跟随角色移动

相机跟随移动 最简单的方式通过插件Cinemachine 在窗口/包管理器选择全部找到Cinemachine&#xff0c;导入。然后在游戏对象/Cinemachine创建2D Camera。此时层级中创建一个2D相机。选中人物拖入检查器Follow。此时相机跟随人物移动。 修改相机视口距离 在检查器中Lens下调正…