leetcode动态规划(十二)-最后一块石头的重量

题目

1049.最后一块石头的重量

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:

  • 如果 x == y,那么两块石头都会被完全粉碎;
  • 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x

最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0

示例 1:

输入:stones = [2,7,4,1,8,1]
输出:1
解释:
组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。

示例 2:

输入:stones = [31,26,33,21,40]
输出:5

提示:

  • 1 <= stones.length <= 30
  • 1 <= stones[i] <= 100

思路

本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了

那这样就和leetcode动态规划(十一)-分割等和子集 相同的思路了

可以看作物品的重量为stones[i],物品的价值为stones[i]

这样就可以和0-1背包中的weight[i]和value[i]对应着了

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

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

2.确定递推公式

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

3.dp数组如何初始化

dp[0] = 0

4.确定遍历顺序

既然 dp[j]中的j表示容量,那么最大容量(重量)是多少呢,就是所有石头的重量和。

把石头遍历一遍,计算出石头总重量 然后除2,得到dp数组的大小。

5.举例推导dp数组

代码

class Solution:def lastStoneWeightII(self, stones: List[int]) -> int:n = len(stones)target = sum(stones)//2dp = [0]*(target+1)for i in range(n):for j in range(target,stones[i]-1,-1):dp[j] = max(dp[j],dp[j-stones[i]]+stones[i])return sum(stones)-2*dp[-1]

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

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

相关文章

GORM框架中的预加载功能Preload详解

一、适用性 在使用 GORM 进行数据库操作时&#xff0c;Preload 是一种非常有用的功能&#xff0c;它用于预加载与某个模型相关联的其他模型。下面是关于 Preload 的适用性以及为什么外键字段一般需要 Preload 的一些详细说明。 1. Preload 的适用性 适用于外键字段&#xff1…

矩阵matrix

点积 在 NumPy 中&#xff0c;dot 是矩阵或向量的点积&#xff08;dot product&#xff09;操作。 假设有两个向量a和 b&#xff0c;它们的点积定义为对应元素相乘&#xff0c;然后求和。公式如下&#xff1a; 例子&#xff1a; 点积的计算步骤是&#xff1a; 因此&#xf…

【Python爬虫课程设计】社交媒体数据抓取与情感分析

【Python爬虫课程设计】社交媒体数据抓取与情感分析 文章目录 &#x1f4ca; 引言&#x1f4ca; 项目背景与设计目标 社交媒体数据的重要性项目设计目标 &#x1f4ca; 爬虫程序设计与实现 爬虫程序概述关键技术与工具数据抓取流程 &#x1f4ca; 数据处理与情感分析 数据清洗…

入门 | Prometheus+Grafana 普罗米修斯

一、prometheus介绍 1、监控系统组成 一个完整的监控系统需要包括如下功能&#xff1a;数据产生、数据采集、数据存储、数据处理、数据展示、分析、告警等。 &#xff08;1&#xff09;、数据来源 数据来源&#xff0c;也就是需要监控的数据。数据常见的产生、直接或间接暴露…

【人工智能-初级】第3章 k-最近邻算法(KNN):分类和Python实现

文章目录 一、KNN算法简介二、KNN算法的工作原理2.1 欧氏距离 三、K值的选择四、KNN算法的优缺点4.1 优点4.2 缺点 五、Python实现KNN分类5.1 导入必要的库5.2 加载数据集并进行预处理5.3 创建KNN分类器并进行训练5.4 模型预测与评估5.5 可视化K值对模型性能的影响 六、总结6.1…

服务器磁盘爆满?别慌,教你轻松清理!

服务器磁盘爆满&#xff1f;别慌&#xff0c;教你轻松清理&#xff01; 简介 服务器磁盘空间告急&#xff0c;网站访问缓慢&#xff0c;甚至无法正常运行&#xff1f;别担心&#xff0c;这篇文章将为你提供一份详细的清理指南&#xff0c;帮助你快速释放服务器磁盘空间&#x…

【算法】Bellman-Ford单源最短路径算法(附动图)

目录 一、性质 二、思路 三、有边路限制的最短路 一、性质 适用于含有负权边的图&#xff08;Dijkstra不适用&#xff09; 更简单&#xff0c;但效率慢 如果对应路径存在负权回路则没有最短路径&#xff08;可用于判断图中是否存在负权回路&#xff09; 相比于spfa&#…

[分享] SQL在线编辑工具(好用)

在线SQL编写工具&#xff08;无广告&#xff09; - 在线SQL编写工具 - Web SQL - SQL在线编辑格式化 - WGCLOUD

物联网实训项目:绿色家居套件

1、基本介绍 绿色家居通过物联网技术将家中的各种设备连接到一起&#xff0c;提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。绿色家居提供全方位的信息交互功能&#xff0c;甚至为各种能源费…

使用DeepSpeed进行单机多卡训练

这是你提供的DeepSpeed单机多卡训练步骤的Markdown格式&#xff1a; 使用 DeepSpeed 进行单机多卡训练的主要步骤 1. 安装 DeepSpeed 确保你已经安装了 DeepSpeed 及其依赖&#xff1a; pip install deepspeed设置模型并集成 DeepSpeed 在模型的定义和训练循环中集成 Deep…

solana phantom NFT图片显示不出来?

solana phantom NFT图片显示不出来&#xff1f; 问题 同样是jpeg格式图片&#xff0c;一个phatom可以显示&#xff0c;一个不可以显示为什么&#xff0c;nft图片格式大小有要求吗&#xff1f; 问题分析 Phantom 官网有一些关于 NFT 集成的文档,其中可能会有关于图片大小限制…

049_python基于Python的热门微博数据可视化分析

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

@tarojs/components 和 taro-ui 中的组件之间的区别

1. 来源与用途&#xff1a; tarojs/components&#xff1a;Taro 官方提供的基础组件库&#xff0c;包含了微信小程序、H5 等不同平台的通用组件&#xff08;如 View, Input, Button, Form 等&#xff09;。这些组件是跨平台的&#xff0c;并提供了与微信小程序等平台原生组件类…

15分钟学Go 第7天:控制结构 - 条件语句

第7天&#xff1a;控制结构 - 条件语句 在Go语言中&#xff0c;控制结构是程序逻辑的重要组成部分。通过条件语句&#xff0c;我们可以根据不同的条件采取不同的行动。今天我们将详细探讨Go语言中的两种主要条件结构&#xff1a;if语句和switch语句。理解这些控制结构对于编写…

CTA-GAN:基于生成对抗网络对颈动脉和主动脉的非增强CT影像进行血管增强

写在前面 目前只分析了文章的大体内容和我个人认为的比较重要的细节&#xff0c;代码实现还没仔细看&#xff0c;后续有时间会补充代码细节部分。 文章地址&#xff1a;Generative Adversarial Network-based Noncontrast CT Angiography for Aorta and Carotid Arteries 代…

JAVA基础面试题准备

一些常见的JAVA基础题&#xff0c;面试中遇到过的会加*显示。 JAVA基础 1.Java中重载和重写的区别&#xff1f;* 2.int 和Integer类型这两个区别吗&#xff1f; 为什么需要有Integer类型&#xff1a; int和Integer类型的区别&#xff1a; 3.遍历list有那些方式吗&#xff1f;…

python如何提取MYSQL数据,并在完成数据处理后保存?

在现代数据驱动的世界中,数据分析已成为企业决策的重要组成部分。 Python作为一种强大的编程语言,因其丰富的库和简单的语法,广泛应用于数据分析、数据清洗和数据可视化等领域。 本文将详细介绍如何使用Python提取MySQL数据库中的数据,并进行数据分析、数据清洗、汇总等操…

【Linux】进程信号(下)

目录 一、信号的阻塞 1.1 信号在内核中的保存方式 1.2 sigset_t信号集 &#xff08;1&#xff09;信号集操作 &#xff08;2&#xff09;sigprocmask函数 &#xff08;3&#xff09;sigpending函数 二、信号的处理 2.1 用户态和内核态 2.2 重谈进程地址空间 三、信号…

盘点2024年4款高清稳定的Windows10录屏工具。

Windows10电脑录屏在生活当中还是挺重要的&#xff0c;无论是教育领域的制作教程&#xff0c;还是游戏玩家记录精彩瞬间&#xff0c;亦或是商务人士进行演示&#xff0c;录屏都能发挥巨大作用。如果设备自带的一些工具无法完成录屏需求的话&#xff0c;这里帮大家找了几款好用到…

AI大模型应用(3)开源框架Vanna: 利用RAG方法做Text2SQL任务

AI大模型应用(3)开源框架Vanna: 利用RAG方法做Text2SQL任务 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;如下图所示&#xff09;检索增强生成&#xff0c;即大模型LLM在回答问题时&#xff0c;会先从大量的文档中检索出相关信息&#xff0c;然后基于这些检索出…