当前位置: 首页 > news >正文

动态规划专练( 1049.最后一块石头的重量Ⅱ)

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

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

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 xy,且 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背包,这是我万万想不到的。

看解释,我们只要把这个数组分成最接近元素和一半的两堆,然后再减一下就可以得到碰撞后的最小值了是不是啊。

那不就是要求,数组中的某个集合最接近某个值的问题吗。可以转成01背包的思想,和416.分那个等和子集一样的思路。

代码如下:

package com.offer;/*** @author bwzfy* @create 2024/4/12**/
public class _1049最后一块石头的重量Ⅱ {public static void main(String[] args) {System.out.println(lastStoneWeightII(new int[]{31, 26, 33, 21, 40}));}public static int lastStoneWeightII(int[] stones) {int sum = 0;for (int i = 0; i < stones.length; i++) {sum += stones[i];}int target = sum / 2;// 目标找出数组中,的一组数据加起来的和最接近target,01背包问题int[][] dp = new int[stones.length][target + 1];for (int i = 1; i <= target; i++) {if (stones[0] <= i) {dp[0][i] = stones[0];}}for (int i = 1; i < stones.length; i++) {for (int j = 1; j <= target; j++) {// 能装入石头if (stones[i] <= j) {dp[i][j] = Math.max(dp[i - 1][j], stones[i] + dp[i - 1][j - stones[i]]);} else {dp[i][j] = dp[i - 1][j];}}}int heap1 = dp[stones.length - 1][target];int heap2 = sum - heap1;return Math.abs(heap1 - heap2);}}

相关文章:

动态规划专练( 1049.最后一块石头的重量Ⅱ)

1049.最后一块石头的重量Ⅱ 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如…...

2024年最佳WordPress插件

我喜欢的最佳WordPress插件&#xff08;也是经验丰富的WordPress开发者强烈推荐的&#xff09;。所有这些插件都是编码干净、超快且一流的。我还包括了对我不喜欢的插件的想法……只为了让你有进一步的了解。 目录 隐藏 1 古腾堡块&#xff1a; 2 内容&#xff1a; 3 缓存…...

Docker 安装 RocketMQ

目录 一、新建两个配置文件 1.1 创建docker-compose.yml文件 1.2 .新建broker.conf文件 二、运行 三、可视化界面 一、新建两个配置文件 1.1 创建docker-compose.yml文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports…...

计算机网络——交换机和路由器

目录 前言 引言 交换机是用来做什么的&#xff1f; 与路由器有什么区别&#xff1f; 网关 子网掩码 网关、路由 前言 本博客是博主用于复习计算机网络的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 这篇博客是在B站掌芝士zzs这个UP主的视频的总结&am…...

Redis Pipelining 底层原理分析及实践

作者&#xff1a;vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时&#xff0c;Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对P…...

milvus各组件的结构体分析

milvus各组件的结构体分析 各组件启动&#xff0c;需要构建各组件的结构体&#xff0c;一共8个。 runComponent(ctx, localMsg, wg, components.NewRootCoord, metrics.RegisterRootCoord) runComponent(ctx, localMsg, wg, components.NewProxy, metrics.RegisterProxy) run…...

vue2和vue3 全选

vue3 <template><input type"checkbox" v-model"selectAll" />全选<ul><li v-for"item in list" :key"item.id">{{ item.value }} <input type"checkbox" v-model"item.check" />…...

Java中的Set、List、Map的区别及主要实现类方法

Java中的Set、List、Map的区别 数组是大小固定的&#xff0c;并且同一个数组只能存放类型一样的数据&#xff08;基本类型/引用类型&#xff09;&#xff0c;JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中&#xff01; JAVA集合只能存放引…...

gitignore:常用说明

示例&#xff1a; Java HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/** !**/src/test/**### IntelliJ IDEA.idea *.iws *.iml *.ipr### NetBeans/nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ logs/### VS Code.vscode/ 说明&#…...

HarmonyOS NEXT应用开发—在Native侧实现进度通知功能

介绍 本示例通过模拟下载场景介绍如何将Native的进度信息实时同步到ArkTS侧。 效果图预览 使用说明 点击“Start Download“按钮后&#xff0c;Native侧启动子线程模拟下载任务Native侧启动子线程模拟下载&#xff0c;并通过Arkts的回调函数将进度信息实时传递到Arkts侧 实…...

水利自动化控制系统平台介绍

水利自动化控制系统平台介绍 在当今社会&#xff0c;水资源的管理和保护日益成为全球关注的重要议题。随着科技的进步和信息化的发展&#xff0c;水利监测系统作为一种集成了现代信息技术、自动化控制技术以及环境监测技术的综合性平台&#xff0c;正在逐步改变传统的水利管理模…...

flask后端+网页前端:基于 socket.io 的双向通信和服务器部署

我想实现的效果是&#xff0c;我的服务器提供两个路由网址&#xff0c;网页A用于拍照、然后录音&#xff0c;把照片和录音传给服务器&#xff0c;服务器发射信号&#xff0c;通知另一个路由的网页B更新&#xff0c;把刚刚传来的照片和录音显示在网页上。 然后网页B用户根据这个…...

【Docker】解决 docker build 提示 `Wrong architecture ‘amd64‘`

解决 docker build 提示 Wrong architecture amd64 使用 securify2 的 docker 版本进行 sc 安全扫描 执行语句 RUN wget https://github.com/souffle-lang/souffle/releases/download/1.6.2/souffle_1.6.2-1_amd64.deb -O /tmp/souffle.deb &&\ gdebi --n /tmp/souff…...

机器学习_XGBoost模型_用C++推理示例Demo

1. 需求 将 python 训练好的 xgboost 模型, 使用C 进行加载并进行推理(预测) 2. 代码实现 #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <string> #include <xgboost/c_api.h>const char *m…...

C语言 | Leetcode C语言题解之第21题合并两个有序链表

题目&#xff1a; 题解&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {/…...

2024考研调剂须知

----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项&#xff0c;系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…...

PCIE协议版--M.2接口规范V1.0中文版1——电气规格篇

3.电气规范 3.1 Connectivity Socket 1 系统接口信号 表15适用于Socket 1-SD和Socket 1-DP输出版本。 3.1.1.补充NFC信号 当一个SIM设备被用作安全元素时&#xff0c;NFC解决方案可以与表16中列出的附加信号相结合。 3.1.2.电源和地 PCI Express M.2 Socket 1使用一个3.3 V…...

【JVM】JVM堆占用情况分析(频繁创建的对象、内存泄露等问题)、jmap+jhat、jvisualvm工具使用

文章目录 一. 相关命令1. 查看进程堆内存整体使用情况&#xff1a;OOM的可能2. 统计类的对象数量以及内存占用&#xff1a;定位内存泄漏 二. 分析内存占用1. 使用 jhat 排查对象堆占用情况1.1. 排查步骤1.2. 具体分析例子a. 分析频繁创建对象导致的OOM 1.3. OQL查看某一个对象的…...

【蓝桥杯每日一题】4.11 更小的数(不用区间DP)

题目来源&#xff1a; 蓝桥杯 2023 省 A]更小的数 - 洛谷 这题只需要用到双指针就OK~ 思路1&#xff1a; 翻转数组的子数组&#xff0c;然后进行比较大小将翻转后的数组存储在字符串 k k k中&#xff0c;然后将字符串 k k k与字符串 a a a进行逐一元素比较&#xff08;因为…...

【线段树】2276. 统计区间中的整数数目

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…...

零代码驯服Qwen-2.5VL:LLaMA-Factory图形界面实战指南

1. 为什么你需要零代码驯服Qwen-2.5VL 想象一下&#xff0c;你手里有一台能看懂图片的AI机器人&#xff0c;但它总把工业零件认成厨房用具。传统解决方法需要你租用几十张显卡&#xff0c;像炼丹一样折腾几个月——但现在&#xff0c;有了LLaMA-Factory的图形界面&#xff0c;这…...

终极指南:解决Embassy嵌入式框架编译错误的10个技巧

终极指南&#xff1a;解决Embassy嵌入式框架编译错误的10个技巧 【免费下载链接】embassy Modern embedded framework, using Rust and async. 项目地址: https://gitcode.com/gh_mirrors/em/embassy Embassy是一个使用Rust和async/await的现代嵌入式框架&#xff0c;但…...

Python内存管理进入“自动驾驶”时代:详解memguard-core插件的AI预测式回收机制,安装仅需3行命令

第一章&#xff1a;Python智能体内存管理策略Python智能体&#xff08;如基于LLM的Agent、ReAct架构或Tool-Calling Agent&#xff09;在运行过程中常面临对象生命周期长、中间状态缓存多、工具调用频繁导致引用残留等问题。其内存管理不能仅依赖CPython默认的引用计数与循环垃…...

LeetCode知识点总结 - 524

LeetCode 524. Longest Word in Dictionary through Deleting考点难度ArrayMedium题目 Given a string s and a string array dictionary, return the longest string in the dictionary that can be formed by deleting some of the given string characters. If there is mor…...

STM32duino ILPS22QS气压传感器驱动深度解析

1. 项目概述STM32duino ILPS22QS 是一个面向 STM32 平台的 Arduino 兼容库&#xff0c;专为意法半导体&#xff08;STMicroelectronics&#xff09;推出的超低功耗数字气压传感器 ILPS22QS 设计。该库并非通用传感器抽象层&#xff0c;而是深度适配 STM32 硬件生态的底层驱动实…...

从Word2Vec到BERT:前馈网络在NLP词嵌入进化史中扮演了什么角色?

从Word2Vec到BERT&#xff1a;前馈网络如何重塑NLP词嵌入的技术基因 在自然语言处理&#xff08;NLP&#xff09;的发展历程中&#xff0c;词嵌入技术的进化犹如一场静默的革命。当我们回溯这段历史时会发现&#xff0c;前馈神经网络&#xff08;Feedforward Neural Network&am…...

OpenCascade避坑指南:BRepMesh网格生成常见的5个问题与解决方法(含性能对比数据)

OpenCascade网格生成实战&#xff1a;5个高频问题深度解析与性能优化指南 当你在CAD开发中第一次调用BRepMesh_IncrementalMesh时&#xff0c;是否遇到过网格生成失败却找不到原因的情况&#xff1f;或是面对复杂模型时性能急剧下降的困境&#xff1f;这些问题往往让初学者束手…...

TinySAM完整指南:如何在5分钟内实现高效图像分割

TinySAM完整指南&#xff1a;如何在5分钟内实现高效图像分割 【免费下载链接】TinySAM 项目地址: https://gitcode.com/gh_mirrors/ti/TinySAM TinySAM是一款革命性的轻量化"分割任何物体"模型&#xff0c;它通过知识蒸馏和量化技术&#xff0c;在保持强大零…...

手把手教你用GD32F30x的定时器搞定BLDC电机霍尔信号捕获(附完整代码)

手把手教你用GD32F30x的定时器实现BLDC电机霍尔信号精准捕获 当你的GD32F30x开发板已经连接好BLDC电机的霍尔传感器&#xff0c;却发现转速计算总是不准确时&#xff0c;问题往往出在定时器的配置细节上。本文将带你从寄存器层面拆解霍尔信号捕获的全流程&#xff0c;解决实际开…...

DataWorks与PyODPS实战:MaxCompute数据处理高效技巧

1. 初识DataWorks与PyODPS&#xff1a;大数据处理的黄金搭档 第一次接触DataWorks和PyODPS时&#xff0c;我就像发现了一个新大陆。DataWorks作为阿里云的一站式大数据开发平台&#xff0c;而PyODPS则是连接Python和MaxCompute的桥梁&#xff0c;这个组合让大数据处理变得前所…...