【代码随想录算法训练营第四十天|卡码网46.携带研究材料,416.分割等和子集】

文章目录

  • 卡码网46.携带研究材料
    • 二维dp数组
    • 一维dp数组(滚动数组)
  • 416.分割等和子集

卡码网46.携带研究材料

这题是01背包问题。

二维dp数组

dp数组[i][j]前一位表示的是物品的种类,后一位表示的是背包的容量,在物体为i时,容量为j的背包的最大价值由不放入i的dp[i-1][j]和放入i的dp[i-1][j-spaces[i]]+values[i]中的最大值所决定,当然这是在容量大于spaces[i]时才能实现,小于spaces[i]的时候则只能维持dp[i-1][j]的数值。最终的最大价值就是由二维dp数组最右下角的值决定。

s = input().split()
M, N = int(s[0]), int(s[1])
spaces = list(map(int, input().split()))
values = list(map(int, input().split()))
dp = [[0 for _ in range(N+1)] for _ in range(M)]
for i in range(spaces[0], N+1):dp[0][i] = values[0]
for i in range(1, M):for j in range(N+1):if j < spaces[i]:dp[i][j] = dp[i-1][j]else:dp[i][j] = max(dp[i-1][j], dp[i-1][j-spaces[i]]+values[i])
print(dp[M-1][N])

一维dp数组(滚动数组)

其实就是上面的二维dp在物品维度压缩,只留下背包层。但是这样就必须要先物品后背包(不然一直都是同一个物品(物品1)在遍历),然后在遍历背包的时候还要注意只能倒序遍历,如果正序的化,前面的数据如果已经添加了该物品,则会重复添加(因为二维dp的时候用的时上一层的数据,不会出现覆盖而重复添加)。

s = input().split()
M, N = int(s[0]), int(s[1])
spaces = list(map(int, input().split()))
values = list(map(int, input().split()))dp = [0 for _ in range(N+1)] 
for i in range(spaces[0], N+1):dp[i] = values[0]for i in range(1, M):for j in range(N, spaces[i]-1, -1):dp[j] = max(dp[j], dp[j-spaces[i]]+values[i])print(dp[N])

416.分割等和子集

能够分割出两个等和的子集,说明子集的合都是整个数组总和的一半。所以如果数组总和为奇数直接返回False。
然后就是找是否有子集能够使得和为数组和的一半target,令dp[i]数组表示和上限为i的时候,数组可以选出的最大子集和,当dp索引为target的时候如果值也为target那么就是可以满足条件。
那么问题就成了一个背包大小为target,各个物品价值为nums对应值的01背包问题,和上一题解法一致。

class Solution:def canPartition(self, nums: List[int]) -> bool:sum_ = sum(nums)if sum_ & 1:return Falsetarget = sum_ >> 1dp = [0 for _ in range(target+1)]for j in range(nums[0], target+1):dp[j] = nums[0]for i in nums[1:]:for j in range(target, i-1, -1):dp[j] = max(dp[j], dp[j-i]+i)return dp[target] == target

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

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

相关文章

Android Room数据库使用介绍

1.简介 Room是Google提供的Android架构组件之一&#xff0c;旨在简化数据库操作。它是SQLite的一个抽象层&#xff0c;提供了更易用和安全的API。 Room的总体架构: 2.Room数据库的基础概念 Entity Entity是Room中的数据表&#xff0c;每个Entity类对应一个SQLite表。 DAO …

研发团队的「技术债」如何进行量化管理?

我共事过的每个团队都会讨论技术债。有些团队知道如何管理它&#xff0c;也有些团队因此崩溃瘫痪&#xff0c;甚至有一家公司因为技术债务没有得到解决而宣告失败。 什么是技术债务&#xff1f; 「债务」这个比喻非常恰当。最早提出「技术债务 Technical Debt」比喻的工程师 W…

Linux(Centos7)OpenSSH漏洞修复,升级最新openssh-9.7p1

OpenSSH更新 一、OpenSSH漏洞二、安装zlib三、安装OpenSSL四、安装OpenSSH 一、OpenSSH漏洞 服务器被扫描出了漏洞需要修复&#xff0c;准备升级为最新openssh服务 1. 使用ssh -v查看本机ssh服务版本号 ssh -V虚拟机为OpenSSH7.4p1&#xff0c;现在准备升级为OpenSSH9.7p1…

Centos7 安装oracle 11.2.0.4

荆轲刺秦王 1. 准备工作 需要下载 Oracle 11g 安装包 2.HostName修改&#xff1a; hostnamectl set-hostname oracle 3. 配置hostname&#xff08;本机IP映射&#xff09;注意&#xff1a;192.168.116.129 需要换乘本地ip vi /etc/hosts 192.168.116.129 oracle # 测试hos…

创新实训2024.06.17日志:大模型微调总结

前段时间其实我们已经部署了大模型&#xff0c;并开放了对外的web接口。不过由于之前某几轮微调实验的大模型在对话时会有异常表现&#xff08;例如响应难以被理解&#xff09;&#xff0c;因此我在项目上线后&#xff0c;监控了数据库里存储的对话记录。确定了最近一段时间部署…

docker部署prometheus

1.拉取镜像 docker pull prom/prometheus2.创建配置文件 cd /root/prometheus touch prometheus.yml touch first_rules.yml3.配置文件内容 prometheus.yml文件内容 # my global config global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Defau…

Docker的常见问题

1.容器启动失败 检查映像&#xff1a;运行 docker images 确认所需映像存在。检查Dockerfile&#xff1a;验证Dockerfile中的指令无误。查看日志&#xff1a;使用 docker logs <container_id> 查找启动失败的具体原因。资源检查&#xff1a;运行 docker info 或 docker …

基 CanMV 的 C 开发环境搭建

不论是使用 CanMV 提供的基于 C 语言和 FreeRTOS 的应用开发方式开发应用程序或是编译 CanMV 固件&#xff0c;都需要搭建基于 CanMV 的 C 开发环境&#xff0c;用于编译 CanMV 源码。 1. 开发环境搭建说明 CanMV 提供了基于 C 语言和 FreeRTOS 的应用开发…

模拟面试三

1. 你能介绍一下什么是微服务架构&#xff1f; 答案&#xff1a;微服务架构是一种软件开发方法&#xff0c;将一个应用程序拆分成一系列小型、自治、可独立运行的服务&#xff0c;每个服务都专注于完成一个特定的业务功能&#xff0c;并通过轻量级的通信机制进行互联。 2. 你…

【教程】hexo 更换主题后,部署在 Github Page 无 CSS 样式

目录 前言环境hexo 更换主题解决部署到 Github Page 后无 CSS 样式的问题 前言 最近更换了 hexo 的主题后&#xff0c;重新部署到 Github Page 上发现不显示 CSS 样式&#xff0c;但在本地启动时又是正常的效果。此外&#xff0c;检查资源请求&#xff0c;发现多个 .css 文件请…

VO 和 DO

什么是 VO? VO&#xff08;Value Object&#xff09; 值对象&#xff08;Value Object&#xff0c;简称 VO&#xff09; 是一种对象&#xff0c;它主要用于在不同的层次之间传递数据。VO 通常是不可变的&#xff0c;即它的状态一旦被创建&#xff0c;就不会改变。值对象没有…

【软件测试】软件测试入门

软件测试入门 一、什么是软件测试二、软件测试和软件开发的区别三、软件测试在不同类型公司的定位1. 无组织性2. 专职 OR 兼职3. 项目性VS.职能性4.综合型 四、一个优秀的软件测试人员具备的素质1. 技能相关2. 非技能相关 一、什么是软件测试 最常见的理解是&#xff1a;软件测…

【效率提升】倍速插件Global Speed

global speed插件可以控制网页在线视频&#xff0c;能够应用在Edge和Google浏览器中&#xff0c;只需要在插件商店中下载并配置即可。这款插件的配置选项有很多&#xff0c;支持视频倍速&#xff08;最低0.25倍速&#xff0c;最高16倍速&#xff09;&#xff0c;固定标签页&…

【Java开发规范】IDEA 设置 text file encoding 为 UTF-8,且文件的换行符使用 Unix 格式

1. IDEA 设置 text file encoding 为 UTF-8 file -> settings -> editor -> code style -> file encoding Transparent-native-to-asci conversion 要不要勾选&#xff1f;> 不推荐勾选&#xff08;它的作用是用来自动转换ASCII编码&#xff0c;防止文件乱码&am…

Modbus协议转Profibus协议模块接热传感器配置攻略

一、前言 在工业自动化控制领域&#xff0c;Modbus协议和Profibus协议是两种常见的通讯协议&#xff0c;它们在设备之间传输数据起着至关重要的作用。而Modbus协议转Profibus协议模块&#xff08;XD-MDPB100&#xff09;设备&#xff0c;则扮演着连接不同通讯协议的桥梁角色。…

常规业务如何做到幂等性

一、前端防抖处理&#xff1a; 采用队列模式&#xff0c;队列插入判重处理&#xff0c;避免多次同事调用接口 二、后端处理 1、新增接口可根据数据库设计采用唯一索引方案机制&#xff0c;避免重复调用 2、更新采用乐观锁 例如update table set where version指定值 3、采用状态…

来点干货,比较好用的3D在线展示网站

制作好的3D模型需要客户对3D模型进行确认&#xff0c;图片和视频给过去&#xff0c;后面往往都会扯皮。无意间翻到几个3D展示网站&#xff0c;试用了下都不是很完善&#xff0c;后面在网上大量查阅资料并经过实际使用&#xff0c;发现几个相对比较好用值得推荐的。 1、Sketchf…

掉电安全文件系统littlefs移植

前言 通过查看oneOS中对littlefs的移植工作&#xff0c;发现&#xff0c;littlefs源码本身&#xff0c;有用的就4个&#xff1a; lfs.clfs.hlfs_util.clfs_util.h 剩下的就是适配层&#xff1a; dfs_lfs.clfs_config.h(和lfs_util.h差不多)lfs_crc.c(和lfs_util.c差不多) …

Python 数据持久化:使用 SQLite3 进行简单而强大的数据存储

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 SQLite3是一种轻量级嵌入式数据库引擎&#xff0c;它在Python中被广泛使用。SQLite3通常已经包含在Python标准库中&#xff0c;无需额外安装。你只需导入 s…

IRIS论文阅读笔记

这是ICLR2023一篇world model的论文&#xff0c;提出了一个称为IRIS的world model方法模型仍然是分为两部分&#xff0c;一部分是模拟世界的world model&#xff0c;包括预测下一帧的观测&#xff0c;预测当前reward&#xff0c;预测是否terminate的三个输出&#xff1b;第二部…