代码随想录算法训练营第四十二天 | 1049最后一块石头的重量II 494.目标和 474.一和零

news/2024/7/5 20:44:01/文章来源:https://www.cnblogs.com/cscpp/p/18277091

1049.最后一块石头的重量

题目链接 文章讲解 视频讲解

解题思路:
将石头尽量分为相等的两堆,两堆最差即为所求结果
石头的重量就是石头的价值

动规五部曲:

  • dp[j]:表示背包容量为j时可以装的石头的总价值
  • 递推公式:dp[j] = max(dp[j], dp[j-stones[i]] + stones[i]
  • 初始化:均初始化为0
  • 遍历顺序:先遍历石头后遍历背包
  • 打印dp数组
class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int weight = 0;for(int val : stones) weight += val;int capcity = weight / 2;// dp[j] 表示容量为j的背包装的石头的总价值最大为多少vector<int> dp(capcity + 1);for(int j = 0; j <= capcity; ++j) dp[j] = 0;// 递推公式: dp[j] = max(dp[j], dp[j-weight[i]] + value[i])// 初始化:均初始化为0for(int j = 0; j < capcity; ++j) dp[j] = 0;// 先遍历石头后遍历背包for(int i = 0; i < stones.size(); ++i) {for(int j = capcity; j >= stones[i]; --j) {dp[j] = max(dp[j], dp[j-stones[i]] + stones[i]);}}return weight - (dp[capcity] << 1);}
};

494.目标和

题目链接 文章讲解 视频讲解

思路:将数组分为两个集合left全部存整数,target全部存负数
那么满足:left + right = sum; left - right = target;
计算得left = (sum + target) / 2;
left即为背包的容量

动规五部曲:

  • dp[j]:装满容量为j的背包有dp[j]种方法
  • 递推公式:dp[j] += dp[j - nums[i]]
  • 初始化:dp[0] = 1, 其他初始化为0
  • 遍历顺序:先遍历物品后遍历背包,背包倒序遍历
  • 打印dp数组
class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;for(int val : nums) sum += val;if((sum + target) % 2 == 1) return 0;if(abs(target) > sum) return 0;int left = (sum + target) >> 1;// dp[j]: 表示容量为j的背包装哪些数可以正好装满vector<int> dp(left + 1, 0);// 递推公式: dp[j] = dp[j], dp[j - nums[i]] + nums[i];// 初始化dp[0] = 1;for(int i = 0; i < nums.size(); ++i) {for(int j = left; j >= nums[i]; --j) {dp[j] += dp[j - nums[i]];}}for(int val : dp) cout << val << " ";return dp[left];}
};

474.一和零

题目链接 文章讲解 视频讲解

  • dp[i][j]: 表示装满i个0和j个1最多可以装dp[i][j]个物品
  • 递推公式:dp[i][j] = max(dp[i - x][j - y], dp[i][j])
  • 初始化:均初始化为0
  • 遍历顺序:先遍历物品后遍历背包
  • 打印dp数组
class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {// dp[i][j]: 装满i个0和j个1,最多装多少个vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));// 递推公式: dp[i][j] = max(dp[i - x][j - y] + 1, dp[i][j])// 初始化 dp[i][j] = 0// 遍历顺序,先遍历物品后遍历背包for(string str : strs) {int x = 0, y = 0;for(char ch : str) {if(ch == '0') ++x;else ++y;}// 遍历背包for(int i = m; i >= x; --i) { for(int j = n; j >= y; --j) dp[i][j] = max(dp[i - x][j - y] + 1, dp[i][j]);}}return dp[m][n];}   
};

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

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

相关文章

Apache DolphinScheduler社区又一PMC获推选通过!

PROFILE姓名:程鑫 公司:阿里云 职位:开发工程师 Github ID: rickchengx 从事领域:大数据调度系统开发 兴趣爱好:健身推举理由 他于2022年8月2日开始了他的DolphinScheduler之旅,在社区工作了将近两年,并于2023年5月12日成为Committer。成为Committer后的一年里,他继续保…

BOSHIDA 探讨DC/AC电源模块为绿色能源应用提供可靠的转换解决方案

BOSHIDA 探讨DC/AC电源模块为绿色能源应用提供可靠的转换解决方案 DC/AC电源模块是一种能够将直流电源转换为交流电源的装置。随着绿色能源的不断发展和应用,DC/AC电源模块在可再生能源、电动车辆、太阳能发电等领域中扮演着重要的角色。本文将着重探讨DC/AC电源模块为绿色能源…

Centos7 安装Rabbitmq3.9.11

安装erlang 安装依赖包yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel下载wget https://github.com/erlang/otp/releases/download/OTP-24.1.7/otp_src_24.1.7.tar.gz解压tar -zxvf otp_src_24.1.7.tar.gz转移到…

mysql数据库简介

一、数据库介绍 1.数据库基本概念 数据(Data) 描述事物的符号记录 包括数字,文字、图形、图像、声音、档案记录等 以“记录”形式按统一的格式进行存储 表 将不同的记录组织在一起 用来存储具体数据 数据库 表的集合,是存储数据的仓库 以一定的组织方式存储的相互有关的数据…

mac 电脑查看已安装的谷歌插件

1、打开谷歌浏览器 地址栏上面输入  chrome://version/ 2、找到 个人资料路径: /Users/admin/Library/Application Support/Google/Chrome/Default3、打开个新窗口 地址了上输入:个人资料路径 ,并找到 Extensions/ 文件夹 4、里面都是已安装的谷歌插件, 想要哪个插件…

Nordic nRF Connect SDK(NCS) VS Code 安装记录

1.Nordic SDK Nordic有2套并存的SDK:老的nRF5 SDK和新的nRF Connect SDK(NCS),两套SDK相互独立,大家选择其中一套进行开发即可。 一般而言,如果你选择的芯片是nRF51或者nRF52系列,那么推荐使用nRF5 SDK。 如果你选择的是Nordic最新产品系列,比如nRF53或者nRF9160,那么…

浅谈 K8s Service 网络机制

浅谈 K8s Service 网络机制 云原生运维圈 2024-07-01 12:03 上海 1人听过以下文章来源于腾讯云原生 ,作者王成腾讯云原生. 云原生技术交流阵地,汇聚云原生最新技术资讯、文章、活动,以及云原生产品及用户最佳实践内容。王成,腾讯云研发工程师,Kubernetes member,从事数据…

全新升级!中央集中式架构功能测试为新车型保驾护航

目前,文中所述功能测试新方案均已应用于国内多款新架构车型的研发,得到了广泛认可。 “软件定义汽车”新时代下,整车电气电气架构向中央-区域集中式发展已成为行业共识,车型架构的变革带来更复杂的整车功能定义、更多的新技术的应用(如SOA服务化、智能配电等)和更…

江门MES制造执行系统:助力工厂实现智能化管理

江门MES制造执行系统(MES)在工厂实现智能化管理方面发挥着重要作用,以下是它的一些助力方面: 实时监控与控制:江门MES系统可以实时监控生产过程中的各个环节,包括设备状态、生产进度、质量指标等,帮助工厂管理人员及时了解生产情况并做出相应的调整和控制。生产计划与排程…

搭建微信小程序

在开发小程序之前,您需要先注册微信小程序。进入小程序页面,单击前往注册,根据指引填写信息和提交相应的资料,点击注册,完成账号申请。使用申请的微信公众平台账号登录小程序后台,单击开发管理> 开发设置,可以看到小程序的AppID,请记录AppID,后续操作中需要使用。 …

《从零开始学Python》(第二版) PDF读书分享

Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。 Pyt…

记一次 .NET某网络边缘计算系统 卡死分析

一:背景 1. 讲故事 早就听说过有什么 网络边缘计算,这次还真给遇到了,有点意思,问了下 chatgpt 这是干嘛的 ?网络边缘计算是一种计算模型,它将计算能力和数据存储位置从传统的集中式数据中心向网络边缘的用户设备、传感器和其他物联网设备移动。这种模型的目的是在接近数…

Cannot load from short array because sun.awt.FontConfiguration.head is null

新服务器,部署项目,使用easyExcel功能导出文件时,报错提示:Cannot load from short array because "sun.awt.FontConfiguration.head" is null,可以看到是字体文件配置引发的空指针异常; 解决方法:登录服务器,执行命令 yum install fontconfigfc-cache --for…

heap

堆块: chunk 堆是以一个个的堆块构成的,这些堆块就叫chunk chunk的大小是8字节对齐,但是一个堆块的具体大小是16字节对齐的,比如一个堆块只能是 0x40,0x50,0x60 不会是0x48这样的数据 其中一个堆块的header头部字节占16字节大小,也就是0x10字节 64位程序下的最小长度是3…

固件的提取

固件提取的三类方法:直接从官网上找到目标型号的设备固件下载 使用Telnet或者ssh从目标设备中获取固件 从开发板中的flash芯片中或者通过uart和jtag调试接口将固件提取下来JTAG(Joint Test Action Group),是一种用于测试和调试电子设备的技术标准。它使用4线或5线接口,其中…

转:在Linux上运行WinForm

C#winform软件实现一次编译,跨平台windows和linux、mac兼容运行,兼容Visual Studio原生界面Form表单开发 - 亲善美 - 博客园 (cnblogs.com)一、背景: 微软的.net core开发工具,目前来看,winform界面软件还没有打算要支持linux系统下运行的意思,要想让c#桌面软件在linux系…

固件的烧录以及部分PCB基础

固件 固件的基础定义: 固件(firmware)一般存储于设备中的电可擦除只读存储器(允许用户通过特定的电子方式复写存储内容,在【工作情况下是只读的,并且关闭电源仍存储数据)EEPROM(Electrically Erasable Programmable ROM)或FLASH芯片中,一般可由用户通过特定的刷新程序进…

Golang:go-querystring将struct编码为URL查询参数的库

Golang:go-querystring将struct编码为URL查询参数的库 原创 吃个大西瓜 Coding Big Tree 2024-05-09 08:30 北京go-querystring is a Go library for encoding structs into URL query parameters.译文:go-querystring 将struct编码为URL查询参数的Golang库文档https://pkg.g…

C#之缓存

原文链接:https://zhuanlan.zhihu.com/p/657458522 缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快。 从概念上讲,缓存是一种性能优化策略和设计考虑因素。 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性 既然缓存是是一种性能…

有关paddleocr在pyinstall中打包问题的解决方案

借鉴网址python解决paddleocr打包问题_pyinstaller怎么解决paddleocr中的动态导入-CSDN博客 在打包时我使用的spec文件如下:(需要将pathe和binaries换为自己的paddleocr路径) block_cipher = Nonea = Analysis([main.py], pathex=[E:\\PyEnviroment\\Lib\\site-packages…