动态规划01背包之1049 最后一块石头的重量 II(第9道)

news2024/11/26 14:27:01
题目:

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

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

如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x
最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。

示例:

 

解法:

本题物品的重量为stones[i],物品的价值也为stones[i]。

对应着01背包里的物品重量weight[i]和 物品价值value[i]。

动规五部曲:

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

01背包中,dp[j]:容量为j的背包,最多可以装的价值为 dp[j]。

本题中,石头的重量是 stones[i],石头的价值也是 stones[i] ,可以 “ 最多可以装的价值为 dp[j] ” == “ 最多可以背的重量为dp[j] ”

(2)确定递推公式

01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);

本题则是:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);

(3)dp数组如何初始化:vector<int> dp(bagweight+1,0);

(4)确定遍历顺序:先遍历物品,后遍历背包容量

(5)举例推导dp数组

class Solution {
public:
    int lastStoneWeightII(vector<int>& stones) 
    {
        //背包容量为所有石头重量/2;
        //转换成01背包问题:背包容量最多能装多少石头
        int n=stones.size();
        int sum=accumulate(stones.begin(),stones.end(),0);
        int bagweight=sum/2;
        vector<int> dp(bagweight+1,0);

        for(int i=0;i<n;i++)
        {
            for(int j=bagweight;j>=stones[i];j--)
            {
                dp[j]=max(dp[j],dp[j-stones[i]]+stones[i]);
            }
        }

        return sum-2*dp[bagweight];

    }
};

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

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

相关文章

Verilog 学习之路

循环 7-10 代码段 generategenvar i;for (i0; i<8; i i1) begin: my_block_nameassign out[i] in[8-i-1];end endgenerate解释 该代码使用了 S y s t e m V e r i l o g SystemVerilog SystemVerilog 中的 g e n e r a t e generate generate 构造&#xff0c;它允许在…

【Docker】快速入门,带你快速了解 Docker

文章底部有投票活动&#xff0c;赶快参与进来吧&#x1f603; 相信大家在开发过程中都听说过 Docker 一词&#xff0c;至于 Docker 在开发中扮演的角色&#xff0c;估计好多人都说不上来&#xff0c;今天就让阿Q带大家一起揭开它神秘的面纱&#xff01; 文章目录 什么是容器&a…

【C++初阶】C++入门——内联函数、auto、范围for、nullptr

文章目录 一、内联函数1.1 定义1.2 特性 二、auto关键字2.1 简介2.2 auto使用细则2.3 不能使用auto的场景 三、基于范围的for循环3.1 范围for的使用条件 四、指针空值nullptr 一、内联函数 普通的函数在调用的时候会开辟函数栈帧&#xff0c;会产生一定量的消耗&#xff0c;在C…

《算法竞赛·快冲300题》每日一题:“推箱子”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 推…

1 考试宝自建题库使用说明

注意&#xff1a; 标准格式&#xff1a;括号里不写对象&#xff0c;然后答案行数另取一行&#xff0c;放在选项后一行也是可以的&#xff0c;选项可以横排或者竖排。横排的话选项要用空格隔开&#xff0c;选项的ABCD要加"."&#xff0c;如A. B. C. D. 1. 法治中国…

多个电源模块带电感,给一个负载用的直流压降仿真-CORE电源

多个电源模块带电感,给一个负载用的直流压降仿真-CORE电源 下面介绍如何对多个电源模块带电感,给一个负载用的直流压降仿真,常见于CPU的CORE电源。以下图为例 具体操作步骤如下 设置VRAM(因为是多个电源输出,所以每个电源都要设置成VRAM)

【C语言】轻松模拟实现qsort函数

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我们今天接着上回更新的内容&#xff0c;讲讲我们如何模拟实现自己的qsort函数&#xff0c; 废话不多说&#xff0c;我们开始今天的内容。 模拟实现qsort函数 qsort函…

文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;59&#xff09;-- 算法导论6.4 3题 三、对于一个按升序排列的包含 n 个元素的有序数组 A 来说&#xff0c;HEAPSORT 的时间复杂度是多少?如果 A 是降序呢? 文心一言&#xff1a; 对于一个按升序排列的包含 n 个元素的有序数组…

ModaHub魔搭社区:AI原生云向量数据库Weaviate 对比 Milvus

通过以下一系列能力比较 Weaviate 对比 Milvus。我们希望您选择适合您的最佳开源数据库,即使它不是我们。 Weaviate 与 Milvus 可扩展性对比 Weaviate Milvus 计算存储分离 ❌ ✔️ 支持 10 亿级向量数据 ❌ ✔️ 云原生 ✔️ ✔️ 多副本 ✔️ ✔️ 查询插入分离

第一次用用Opencv进行图像处理

2023.7.06更新 codeblocks安装opencv 直接放参考链接&#xff0c;完成安装该步骤来&#xff0c;简单高效&#xff01; 安装教程链接 有一个问题就是第一次安装完成后运行时会报确实某些ddl的错误&#xff0c;关机重启就好啦&#xff01; 尝试运行 ddl的错误解决后可以用以…

用Python采用Modbus-Tcp的方式读取PLC模块数据

使用计算器得到需要的寄存器地址 这里PLC地址是83,对应的程序16进制读取地址是53 实际上由于PLC地址从1开始&#xff0c;所以这里实际地址应该是52&#xff0c;因为计算机从0开始 使用网络调试助手生成报文 使用Python中的内置函数int()。以下是将人员卡号’b’3b44’转换为十…

mac批量提取文件夹的名称,怎么操作?

mac批量提取文件夹的名称&#xff0c;怎么操作&#xff1f;很多小伙伴想知道在mac电脑上可以一键快速批量的将大量文件夹的名提取出来&#xff0c;而不是采用一个一个名称提取的方法&#xff0c;这是一个有利于提高工作效率的办法&#xff0c;这一项技能在网上几乎找不到解决办…

智能感测型静电消除器的原理

感测型静电消除器是一种能够监测和消除静电的装置。静电是由于物体表面积聚了不平衡的电荷而产生的现象&#xff0c;常常会引发电击、火花、物体吸附等问题。 感测型静电消除器通常包含以下几个主要部分&#xff1a; 1. 传感器&#xff1a;用于检测静电电荷的存在和强度。传感…

V4l2-ctl

1 v4l-utils v4l-utils是一种用于处理媒体设备的软件包&#xff0c;它主要包含两个常用工具1&#xff1a; media-ctl&#xff1a;用于配置拓扑结构中各节点的format、大小、链接&#xff1b;操作/dev/medio0节点&#xff1b;获取Camera支持数据格式等。v4l2-ctl&#xff1a;用…

Java面试为啥会越来越难?

最近感慨面试难的人越来越多了&#xff0c;一方面是市场环境&#xff0c;更重要的一方面是企业对Java的人才要求越来越高了。 基本上这样感慨的分为两类人&#xff0c;第一&#xff0c;虽然挂着3、5年经验&#xff0c;但肚子里货少&#xff0c;也没啥拿得出手的项目&#xff0c…

追妹神器,恋爱神器,哄老婆开心,智能机器人每天给你心爱的TA发送早晚安问候

柠檬恋爱助理配置文档 柠檬恋爱助理插件是利用微信测试公众号&#xff0c;实现每天给你的TA发送早晚安等模板消息的一款全自动化插件&#xff0c;恋爱神器、追妹神器。真正做到只需简单配置&#xff0c;就可以实现哄你的TA开心快乐每一天。 项目地址&#xff1a;点击查看 体…

【C语言】-- 一篇带你了解指针数组与数组指针

目录 一、什么是指针数组和数组指针 1. 指针数组&#xff1a;顾名思义&#xff0c;存放指针的数组。 补充&#xff08;1&#xff09;&#xff1a;指针数组还可以和字符串数组相结合使用 补充&#xff08;2&#xff09;&#xff1a;二维数组与指针数组的区别 2. 数组指针&am…

UriComponentsBuilder使用发现参数被编码了

前言 开发中&#xff0c;小编在项目中&#xff0c;使用RestTemplate做GET请求&#xff0c;为了优雅的封装参数&#xff0c;使用了UriComponentsBuilder来进行参数封装。直接123将代码写完&#xff0c;远程调用有数据&#xff0c;远程底层solr库&#xff0c;所以拿到数据了&…

Linux的基本使用和web程序部署

注意&#xff1a;本文章不适合C学习者&#xff08;知识点远远不够&#xff09;&#xff0c;只适合Java学习者&#xff0c;学习简单的Linux命令 1.Linux的背景知识 1.1Linux是什么 Linux是一个操作系统&#xff0c;和Windows是“并列”的关系。经过多年的发展&#xff0c;Lin…

控制台警告:Added non-passive event listener to a scroll-blocking <some> event

页面中的echarts图表缩放后在控制台就会出现以下提醒&#xff0c;虽然只是报黄提醒&#xff0c;但本人强迫症严重,见不得控制台有任何异常...... [Violation] Added non-passive event listener to a scroll-blocking <some> event. Consider marking event handler as …