leetcode动态规划(十一)-分割等和子集

题目

416.分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例 1:

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。

示例 2:

输入:nums = [1,2,3,5]
输出:false
解释:数组不能分割成两个元素和相等的子集。

提示:

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 100

思路

这道题目转换为0-1背包问题,数组中每个元素只能使用一次

设sum=sum(nums),在nums中,两个子集的和相等,那就是每个子集和的和都等于sum/2,题目就转换为:集合里能否出现总和为 sum / 2 的子集

即从nums中取物品能否将sum/2的背包装满问题,这里将nums中的元素转换为单位重量具备单位价值的关系,即重量为1的物品的价值为1,即可套到0-1背包的链路里

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

1.确定dp数组(dp table)以及下标的含义

dp[j]表示容量为j的背包所能背的最大价值

2.确定递推公式

dp[j] = max(dp[j],dp[j-nums[i]]+nums[i])

3.dp数组如何初始化

dp[0] = 0

4.确定遍历顺序

与0-1背包的一维数组一样即可

5.举例推导dp数组

如果dp[j] == j 说明,集合中的子集总和正好可以凑成总和j,理解这一点很重要。 

代码

class Solution:def canPartition(self, nums: List[int]) -> bool:n = len(nums)nums_sum = sum(nums)if nums_sum%2 !=0:return Falsetarget = int(nums_sum/2)dp = [0]*(target+1)for i in range(n):for j in range(target,nums[i]-1,-1):dp[j] = max(dp[j],dp[j-nums[i]]+nums[i])return dp[-1]==target

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

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

相关文章

如何进行数据库缩容 | OceanBase应用实践

作者&#xff1a;关炳文&#xff0c;爱可生 DBA 团队成员&#xff0c;负责数据库相关技术支持。 本文详细介绍了OceanBase V3.2版的集群中&#xff0c;面对数据文件缩容的场景的一套缩容方案&#xff0c;作为大家的参考。 缩容场景 某银行运行的一套采用1-1-1架构的OceanBase…

自动驾驶---基于dds/ros的通信中间件

1 背景 DDS&#xff08;数据分发服务&#xff0c;Data Distribution Service&#xff09;和ROS&#xff08;机器人操作系统&#xff0c;Robot Operating System&#xff09;是两种在各自领域内具有重要影响的技术。它们是两种不同的中间件&#xff0c;并且在分布式系统、尤其是…

源代码加密技术的一大新方向!

在当今这个信息爆炸的时代&#xff0c;企业所面临的数据安全挑战日益严峻。传统的文档加密方法已经无法满足日益复杂的安全需求。幸运的是&#xff0c;SDC沙盒加密系统以其革命性的安全理念和先进技术&#xff0c;为企业提供了一个更可靠、更高效的数据保护方案。 传统加密方案…

MySQL-16.DQL-分页查询

一.DQL-分页查询 -- 分页查询 -- 1. 从 起始索引0 开始查询员工数据&#xff0c;每页展示5条记录 select * from tb_emp limit 0,5; -- 2.查询 第1页 员工数据&#xff0c;每页展示5条记录 select * from tb_emp limit 0,5; -- 3.查询 第2页 员工数据&#xff0c;每页展示5条记…

Docker实战:从入门到进阶

Docker实战&#xff1a;从入门到进阶 引言 Docker是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中&#xff0c;然后发布到任何支持Docker的平台上。本文将通过实战和应用举例&#xff0c;带领大家深入了解Docker的强大…

【Kenel】基于 QEMU 的 Linux 内核编译和安装

文章目录 安装虚拟机系统共享目录编译内核卸载内核参考资料 本文主要记录个人做存储系统研究时&#xff0c;在 QEMU 环境下编译和安装 Linux 内核的过程 安装虚拟机系统 之前在 利用 RocksDB ZenFS 测试 ZNS 的环境搭建和使用 给出过借助 VNC 进行图形化安装的步骤&#xff…

使用 MySQL 从 JSON 字符串提取数据

使用 MySQL 从 JSON 字符串提取数据 在现代数据库管理中&#xff0c;JSON 格式因其灵活性而广泛使用。然而&#xff0c;当数据存储在 JSON 中时&#xff0c;我们经常需要将其转换为更易于处理的格式。本篇文章将通过一个具体的 SQL 查询示例&#xff0c;展示如何从存储在 MySQ…

利用Pix4D和ArcGIS计算植被盖度

除了水文分析和沟道形态分析之外&#xff0c;在实际工作中还要计算植被盖度&#xff01; 植被盖度&#xff0c;也称为植被覆盖率或植物覆盖度&#xff0c;是指某一地表面积上植物冠层垂直投影面积占该地表面积的比例。它通常以百分比的形式表示&#xff0c;是描述地表植被状况的…

mapbox没有token/token失效,地图闪烁后变空白,报错Error: A valid Mapbox access token is required to use Mapbox GL JS.

目录 mapbox没有token/token失效&#xff0c;地图闪烁后空白&#xff0c;报错Error: A valid Mapbox access token is required to use Mapbox GL JS. 一、问题描述 二、mapbox去除token验证 1、找到mapbox-gl文件夹 2、找到mapbox-gl.js文件 3、找到对应位置并修改 4、清…

uploads-labs靶场刷题记录

Pass-01 尝试上传一句话木马 1.php: <?php eval($_POST[cmd]);?>发现设置了白名单且抓包没有记录&#xff0c;说明在前端进行的拦截&#xff08;可以禁用前端的JS从而绕过拦截&#xff0c;达到直接上传木马的目的&#xff09;。 将一句话木马文件加上.jpg后缀1.php.jp…

【京准电钟】“安全卫士”:卫星时空安全隔离防护装置

【京准电钟】“安全卫士”&#xff1a;卫星时空安全隔离防护装置 【京准电钟】“安全卫士”&#xff1a;卫星时空安全隔离防护装置 当前&#xff0c;我国电力系统普遍采用北斗卫星或者GPS卫星授时来实现时间同步&#xff0c;但不加防护的授时装置存在卫星信号被干扰或欺骗的风险…

nodejs 实现docker 精简可视化控制

地址 https://github.com/xiaobaidadada/filecat 说明 使用react 和nodejs 实现的非常轻量的服务docker管理。

Python`__init__()`详解

在Python编程语言中&#xff0c;__init__() 方法是一个特殊的方法&#xff0c;它是一个类的构造器。每当创建类的新实例时&#xff0c;Python都会自动调用它。__init__() 方法的主要目的是初始化新创建对象的状态。 以下是对 __init__() 方法的几点解释&#xff1a; 初始化方法…

iOS 大数相加

大数相加的技术点在于进位(两数相加大于10之后进位) 思路如下: 1.从右往左便利,依次去除两个数M和N的个位数、十位数、百位数~~~相加 2.如果M遍历完了,N还没完,那么M用0作为位数上的加数: 代码如下: - (void)bigNumAdd:(NSMutableArray *)arrayA ArrayB:(NSMutableArray *…

创建工具类之获取SqlSession

我们在编写后端程序时&#xff0c;每次想运行一个SQL语句&#xff0c;就需要创建一个SqlSession&#xff0c;因此我们可以封装一个方法&#xff0c;来简化我们的操作。 一般我们需要先在src/main/java下建立一个utils包&#xff0c;专门用来存放各种方法。后期我们还需要其他的…

ArchLinux VSCode 1.94.2无法安装or更新解决办法

此方法参考了这篇博客https://www.debugpoint.com/failed-connect-raw-githubusercontent-com-port-443/#google_vignette 某一次paru后&#xff0c;一直报错503什么的&#xff0c;在archlinux官网看到pacman安装的是个Open VSX版本的&#xff0c;是Arch官方的版本&#xff0c;…

Postman中的form-data 和 JSON 的区别

在使用 Postman 进行 API 测试时&#xff0c;form-data 和 JSON 是两种常用的请求体格式&#xff0c;它们有以下几个主要区别&#xff1a; 1. 数据格式 form-data: 主要用于表单数据的提交&#xff0c;适合文件上传和键值对的数据传递。数据以键值对的形式编码&#xff0c;类似…

【Vue3】将 Element Plus 引入 Vue3 项目

前言 在 Vue3 项目中使用 Element Plus 可以为项目提供丰富的 UI 组件和交互体验。下面将介绍如何将 Element Plus 引入 Vue3 项目中。 步骤 安装 Element Plus 首先需要通过 npm、yarn 或 pnpm 安装 Element Plus 包。可以选择其中一种方式进行安装。 # NPM $ npm install…

Centos7搭建minio对象存储服务器

Centos7搭建minio对象存储服务器 安装二进制程序配置服务文件 安装二进制程序 参考&#xff1a;https://segmentfault.com/q/1010000042181876 minio中国版&#xff1a;https://www.minio.org.cn/download.shtml#/linux # 下载二进制程序 wget https://dl.min.io/server/min…

机器人学 目录

目录 【机器人学】1-1.六自由度机器人运动学正解 【附MATLAB代码】 【机器人学】1-2. MATLAB机器人工具箱的安装与问题处理 【机器人学】1-3.六自由度机器人工作空间 【附MATLAB代码】 【机器人学】2-1.六自由度机器人运动学逆解【附MATLAB机器人逆解代码】 【机器人学】3…