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

news2024/11/15 17:26:54
题目:

有一堆石头,用整数数组 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/757746.html

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

相关文章

4029: 网格行走

题目内容 在一个 n n n \times n nn 的网格上行走&#xff0c;从 ( 1 , 1 ) (1, 1) (1,1) 走到 ( n , n ) (n, n) (n,n)。每次只能向下走一步或向右走一步。 每个点 ( i , j ) (i, j) (i,j) 有权值 a i , j a_{i, j} ai,j​&#xff0c;给定一个数 x x x&#xff0c;求…

电机驱动系列(1)--例程下载演示

电机驱动系列&#xff08;1&#xff09; 使用设备连线实操感想 使用设备 硬件&#xff1a;野火骄阳板–STM32F407IGT6&#xff0c;野火无刷电机驱动板&#xff0c;PMSM电机软件&#xff1a;MCSDK&#xff0c;STM32CubeMX&#xff0c;Keil5软件安装注意事项&#xff1a;MCSDK-F…

SOF-SLAM论文翻译

SOF-SLAM:面向动态环境的语义可视化SLAM 摘要-同时定位与绘图(SLAM)在计算机视觉和机器人领域中占有重要地位。为了便于分析&#xff0c;传统的SLAM框架采用了强静态世界假设。如何应对动态环境是一个非常重要的问题&#xff0c;越来越受到人们的关注。现有的动态场景SLAM系统…

MySQL不适合创建索引的7种情况

1. 在where中使用不到的字段&#xff0c;不要设置索引 WHERE条件&#xff08;包括order by &#xff0c;group by&#xff09; 2. 数据量小的表最好不要使用索引 表记录太少&#xff0c;比如少于1000个&#xff0c;创建索引会先查索引&#xff0c;再回表&#xff0c;查询花费…

虚拟机安装及使用

无论下载什么软件&#xff0c;最好都要单独设置个文件夹 文章目录 VMware下载CentOS下载Xshell 7下载WinSCP下载linux命令 VMware下载 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; VMware Workstation Pro安装 一直傻瓜式安装 可以上网找许可证秘钥 …

asm: 实现打印“Hello, world!“

使用汇编打印“Hello, world!“ 实现打印"Hello, world!"的汇编代码代码详细剖析 实现打印"Hello, world!"的汇编代码 我们来直接贴代码 section .textglobal _start _start:mov edx,lenmov ecx,msgmov ebx,1mov eax,4 int 0x80mov …

pytest 通过装饰器获取测试case的断言失败结果

test11.py import logging from functools import wrapsdef log_exceptions(func):wraps(func)def wrapper(*args, **kwargs):# 创建日志记录器logger logging.getLogger(func.__name__)logger.setLevel(logging.ERROR)# 创建文件处理器file_handler logging.FileHandler(er…

MySQL(五)缓存策略

MySQL系列文章 MySQL&#xff08;一&#xff09;基本架构、SQL语句操作、试图 MySQL&#xff08;二&#xff09;索引原理以及优化 MySQL&#xff08;三&#xff09;SQL优化、Buffer pool、Change buffer MySQL&#xff08;四&#xff09;事务原理及分析 MySQL&#xff08;五&a…

利用pgloader工具将MySQL数据迁移至PostgreSQL数据库

一、简介 pgloader是一款开源软件,可以将各种来源的数据加载到PostgreSQL数据库中&#xff0c;支持动态读取数据&#xff0c;使用 COPY 流式传输协议将数据加载到 PostgreSQL 数据库中&#xff0c;并使用单独的线程读取和写入数据&#xff0c;由于能够直接从源数据库加载数据。…

1771_Windows下格式化Linux硬盘

全部学习汇总&#xff1a; GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 我自己使用Linux系统多年&#xff0c;但是对于很多操作系统相关的知识我其实并不是很了解。我当初之所以使用Linux一是因为这个系统能够提供给我所有想要的工…

Unity游戏源码分享-Unity手游射击横版游戏

Unity游戏源码分享-Unity手游射击横版游戏 战斗场景 项目地址&#xff1a; https://download.csdn.net/download/Highning0007/88050256

Deployment:让应用永不宕机

“Deployment”&#xff0c;顾名思义&#xff0c;它是专门用来部署应用程序的&#xff0c;能够让应用永不宕机&#xff0c;多用来发布无状态的应用&#xff0c;是 Kubernetes 里最常用也是最有用的一个对象。 Deployment 的关键字段&#xff1a;先看 replicas 字段。它的含义比…

在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件

目的和思路 一个Vitis IDE 裸机项目&#xff0c;需要将视频帧无损地保存下来 由于每帧的像素数据是 16bit 1通道的 bayer 格式&#xff0c;满足这一需求的图像格式似乎只有 tiff 格式 开源的tiff 库是 libtiff&#xff0c;而在 Vitis IDE 裸机项目中要使用的话就需要交叉编译…

AD22软件系统参数的一些基本设置

AD22软件系统参数设置 SystemData managementSchematicPCB Editor System Data management Schematic PCB Editor

集群基础5——keepalived对apache高可用

文章目录 一、基本了解二、配置文件参数释义2.1 默认配置文件2.2 定制配置文件2.2.1 vrrp_instance段配置参数2.2.2 vrrp_script段配置参数2.2.3 real_server段配置参数2.2.4 tcp_check段配置参数 三、keepalived对apache高可用3.1 环境说明3.2 安装服务3.3 配置主服务器3.4 配…

前端编码规范

prettier 配置 1. vscode 安装prettier 的 插件 2. 新建 .prettierrc 文件 {"semi": false, // 不尾随分号"singleQuote": true, // 使用单引号"trailingComma": "none" // 多行逗号分隔的语法&#xff0c;最后一行不加逗号 }eslin…

orbslam3 生成标定板rosrun kalibr kalibr_create_target_pdf --type

rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.08 --tspace 0.3小师妹要做相机视觉标定&#xff0c;需要制作棋盘格&#xff0c;无奈其电脑有些卡&#xff0c;对此毫无经验的博主从头开始安装&#xff08;此前博主已经安装了ROS环境&#x…

精品个人或团队引导页网站HTML源码_好看大气

2023全新宽屏大气好看团队个人指导页网站HTML源码&#xff0c;带音乐视频mv&#xff0c;源码比较小&#xff0c;只有七兆&#xff0c;就因为一个MV占了十几兆。源码也很漂亮&#xff0c;但是有个缺点就是没有手机适配&#xff0c;只能PC浏览器正常显示&#xff0c;手机不能完全…

“探索图像处理的奥秘:使用Python和OpenCV进行图像和视频处理“

1、上传图片移除背景后下载。在线抠图软件_图片去除背景 | remove.bg – remove.bg 2、对下载的图片放大2倍。ClipDrop - Image upscaler 3、对放大后的下载照片进行编辑。 4、使用deepfacelive进行换脸。 1&#xff09;将第三步的照片复制到指定文件夹。C:\myApp\deepfakeliv…

Java 设计模式——模板方法模式

目录 1.概述2.结构3.案例实现3.1.抽象类3.2.具体子类3.3.测试 4.优缺点5.使用场景6.JDK 源码解析6.1.InputStream6.2.AbstractQueuedSynchronizer 1.概述 &#xff08;1&#xff09;在面向对象程序设计过程中&#xff0c;程序员常常会遇到这种情况&#xff1a;设计一个系统时知…