力扣1049.最后一块石头的重量(01背包)之理解篇

server/2024/12/14 15:00:13/

1049. 最后一块石头的重量 II

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sumNum = 0;for(int i = 0;i < stones.size();++i){sumNum += stones[i];}int target = sumNum / 2;vector<int>dp(target + 1, 0);for(int i = 0;i < stones.size();++i){for(int j = target;j >= stones[i];--j){dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);}}return sumNum - dp[target] - dp[target];}
};

思考了很久不知道为什么将一堆石头划分为质量最接近的两堆,然后他们之差就是最后的结果.

后来仔细想了想还是想出来了,以下是我的理解:

可以将两堆抽象为两杯水,我们把两堆石头各化为水装进两个杯子,如果两个杯子水的总量相同,证明我们可以将所有石头全部碰碎(目前为止没有问题)

我们采取的方法是将石头划为质量最接近的两堆,因为质量最接近,如果质量相等直接返回0.如果不相等,说明我们使用的01背包方法已经为我们找到了尽可能装满sumNum/2的最优解,即能够使得碰撞后剩下的最后一个石头最小,(我的疑虑是为什么结果不是一边剩下两块石头或更多,但实际上,这种情况并不会出现,因为如果出现这种情况,说明左右总大小还不是最接近sumNum/2的最优解),最优解就是保证了左右碰撞后只能剩下最后一个石头,并且其在所有碰撞结果中最小.

这题我简化为两杯水去理解,结果就是豁然开朗,可以吧石头的碰撞简单地想象为消消乐(水与水之间的消消乐).

题外话:二刷到动态规划,还是觉得自己在动态规划这方面没有充分的理解,我觉得未来还要考虑三刷


http://www.ppmy.cn/server/150118.html

相关文章

后端接受前端传递数组进行批量删除

问题描述&#xff1a;当我们需要做批量删除功能的时候&#xff0c;我们循环单次删除的接口也能进行批量删除&#xff0c;但要删除100条数据就要调用100次接口&#xff0c;或者执行100次sql&#xff0c;这样系统开销是比较大的&#xff0c;那么我们直接采用接收的数组格式数据sq…

springboot423玩具租赁系统boot(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装玩具租赁系统软件来发挥其高效地信息处理的作用&#xff0c…

OpenAI 正式赋予 ChatGPT 通过视频实时与用户互动的能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Alan Chhabra:MongoDB AI应用程序计划(MAAP) 为客户提供价值

MongoDB全球合作伙伴执行副总裁 Alan Chhabra 每当有人向我问询MongoDB&#xff0c;我都会说他们很可能在不觉之间已经与MongoDB有过交集。事实上&#xff0c;包括70%财富百强在内的许多世界领先企业公司都在使用MongoDB。我们在MongoDB所做的一切都是为了服务客户&#xff0c…

Python实现中国象棋

探索中国象棋 Python 代码实现&#xff1a;从规则逻辑到游戏呈现 中国象棋&#xff0c;这款源远流长的棋类游戏&#xff0c;承载着深厚的文化底蕴与策略智慧。如今&#xff0c;借助 Python 与 Pygame 库&#xff0c;我们能够在数字世界中复刻其魅力&#xff0c;深入探究代码背后…

dolphinscheduler服务RPC框架源码解析(四)RPC提供者服务的设计实现

RPC服务提供者的设计实现 1.概述2.RPC提供者服务设计3.RPC服务提供者实现3.1.工程结构3.1. RpcServer类3.2. NettServerConfig类3.3. NettyRemotingServerFactory类3.4. NettyRemotingServer类3.5.实现RPC提供者Handler处理器4.总结1.概述 RPC服务提供者需要完成解析@RpcServi…

无人设备遥控器动态调频的作用

一、优化通信质量和控制性能 动态调频功能允许遥控器根据当前环境或用户需求&#xff0c;自动调整无线电信号的频率。这一功能对于确保无人设备在复杂环境中的稳定通信和精确控制至关重要。当遥控器检测到当前使用的频率受到干扰或信号质量下降时&#xff0c;它会自动切换到另一…

虚拟机网络部署固化IP

有时我们发现在重启虚拟机后&#xff0c;Linux连接不上了&#xff0c;查看原来是IP变了&#xff0c;这是由于IP没有固化导致&#xff0c;所以要先固化ip。 配置网络环境&#xff1a; 1. 关闭防火墙 &#xff08; 重要 &#xff09; 1:查看防火状态 systemctl status firewa…