代码随想录Day43 | 1049. 最后一块石头的重量 II 494. 目标和

代码随想录Day43 | 1049. 最后一块石头的重量 II 494. 目标和

  • 1049.最后一块石头的重量II
  • 494.目标和
  • 474.一和零
  • 01背包
    • 01背包应用问题

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

文档讲解:代码随想录
视频讲解: 这个背包最多能装多少?LeetCode:1049.最后一块石头的重量II
状态

主要目的就是将石头分成重量和相近的两堆,然后最后两堆相减重量和最小。所以还是先求得sum/2,然后以0~sum/2为背包容量,来统计当前dp[j]的j容量下,从stones中选取任意数量的石头,使得和为不大于j的最大值。

  1. dp数组
    dp[j]表示在容量j下,选取任意数量的石头,不大于j的最大和
  2. 递推公式
    dp[j] = max(dp[j],dp[j-stones[i])+stones[i])
  3. 初始化
    全是正数结果,所以可以初始化为0
    dp[0] = 0
  4. 遍历顺序
    先石头再背包,背包倒序
  5. 打印dp数组
class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for(int i = 0;i<stones.size();i++){sum+=stones[i];}int target = sum/2;//dp 当前不大于j的最大和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 sum-2*dp[target];}
};

494.目标和

文档讲解:代码随想录
视频讲解: 装满背包有多少种方法?| LeetCode:494.目标和
状态

一道组合问题,可以按照回溯方法求解,但复杂度过高。
使用动态规划的方法来解决组合问题
同样和为sum,所有正数和设为x,那么所有负数的和绝对值就是sum-x。那么我们要求的正数加负数的结果就是2x-sum。所以对于target我们的x可以表示为x = (target+sum)/2;
那么就是容量为0~x的背包,从数组中任意选取数字,使得其和相加为x。

  1. dp数组
    dp[j]表示当前容量为j,dp[j]就是能够选取使得和为j的方法数
  2. 递推公式
    dp[j]中j = j-nums[i] + nums[i],也即是说对于数组中每一个数nums[i]都有可能存在一个数,两个数相加为j,那么dp[j]的总次数就是每个nums[i]存在对应的对值的个数之和。
    dp[j] += dp[j-nums[i]]
  3. 初始化
    dp[0] = 1;
    相当于是和为0默认开始为1,但如果后续的和目标为0,那么值会继续增加
  4. 遍历顺序
    先数字,再背包
  5. 打印dp数组
class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;for(int i=0;i<nums.size();i++){sum+=nums[i];}if(abs(target) > sum) return 0;//如果sum+target没有办法被2整除 也不存在//x = (sum+target)/2if((sum+target)%2 == 1) return 0;int x = (sum+target)/2;//dp数组vector<int> dp(x+1,0);dp[0] = 1;for(int i = 0;i<nums.size();i++){for(int j = x;j>=nums[i];j--){dp[j] += dp[j-nums[i]];}}return dp[x];}
};

474.一和零

文档讲解:代码随想录
视频讲解: 装满这个背包最多用多少个物品?| LeetCode:474.一和零
状态

m个0 和 n个1 是两个背包

  1. dp数组
    dp[i][j]表示集合中有i个0,j个1的最长集合长度。
  2. 递推公式
    假设要增加的字符串中拥有x个0,y个1那么dp[i][j] = dp[i-x][j-y]+1;
    dp[i][j] = max(dp[i][j],dp[i-x][j-y]+1);
  3. 初始化
    全部初始化为0。
  4. 遍历顺序
    先物品(字符串)再背包(0和1的个数限制)背包倒序
  5. 打印dp
class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {//实际上是1维dp只不过是两个背包所以使用二维数组统计vector<vector<int>> dp(m+1,vector<int>(n+1,0));//遍历每个字符串统计0和1的个数for(string str : strs){int x = 0;int y = 0;for(char c : str){if(c == '0') x++;if(c == '1') y++;}//遍历背包for(int i = m;i>=x;i--){for(int j = n;j>=y;j--){dp[i][j] = max(dp[i][j],dp[i-x][j-y]+1);}}}return dp[m][n];}
};

01背包

在这里插入图片描述
可以看到对于物品数量只有一个的问题一般都是使用01背包解决。这就提示我们需要注意分辨题目中哪个是背包哪个是物品。
01背包的初始化一般都初始化为0。

01背包应用问题

  1. 给定背包容量,求能够装满背包的最大价值
  2. 给定背包容量,求能否刚好装满背包
  3. 给定背包容量,从物品中选择最多能装多少
  4. 给定背包容量,有多少种方法能够装满
  5. 给定背包容量,装满背包最多有多少物品

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

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

相关文章

【图形学】投影和消隐简介

投影 正交投影 对于物体上任意一点的三维坐标P(x,y,z),投影后的三维坐标为 P ′ ( x ′ , y ′ , z ′ ) P^\prime(x^\prime,y^\prime,z^\prime) P′(x′,y′,z′),那么正交投影的方程为 { x ′ x y ′ y z ′ 0 \begin{cases} x^\primex\\y^\primey\\z^\prime0 \end{case…

canvas绘制横竖坐标轴(带有箭头和刻度)

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

[项目管理] 如何使用git客户端管理gitee的私有仓库

最近发现即使翻墙也无法g使用ithub了&#xff0c;需要把本地的项目搬迁到新的git托管平台。 gitee 是一个国内开源项目托管平台&#xff0c;是开源开发者、团队、个人进行 git 代码管理和协作的首选平台之一。本文将详细介绍如何向 gitee 提交私有项目。 注册 Gitee 账号并创建…

P3372 【模板】线段树 1

网址如下&#xff1a; P3372 【模板】线段树 1 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题如其名 昨天做了一道开关&#xff08;也是线段树的&#xff09; 想着今天复习一下 代码如下&#xff1a; #include<iostream> using namespace std; typedef long long…

golang 引入swagger(iris、gin)

golang 引入swagger&#xff08;iris、gin&#xff09; 在开发过程中&#xff0c;我们不免需要调试我们的接口&#xff0c;但是有些接口测试工具无法根据我们的接口变化而动态变化。文档和代码是分离的。总是出现文档和代码不同步的情况。这个时候就可以在我们项目中引入swagge…

【漏洞复现】多语言药房管理系统MPMS文件上传漏洞

Nx01 产品简介 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0c;并根据到期、产品等各种参数提供各种报告。 Nx02 漏洞描述 …

显示器颜色显示技术原理

此图片来源于网络 1、人眼是如何看到颜色的 以下介绍如何定义颜色的基本知识。首先人眼是如何看到颜色的。可见光的光谱范围从380纳米到750纳米。在此范围内&#xff0c;可以看到每种可见颜色的相应波长。将讨论如何将可见光谱的波长组合成其他颜色&#xff0c;以及这一过程是…

2023年12月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的?( ) A:10倍 B:2倍 C:4倍 D:8倍 答案:C 二进制进位规则是逢二进一,因此末尾添加一个0,是扩大2倍,添加两个0…

postman执行批量测试

1.背景 有许多的人常常需要使用第三方系统进行重复的数据查询&#xff0c;本文介绍使用PostMan的方式对数据进行批量的查询&#xff0c;减少重复的劳动。 2.工具下载 3.初入门 一、如图示进行点击&#xff0c;创建collection 二、输入对应的名称 三、创建Request并进行查…

C++后端开发之Sylar学习二:配置VSCode远程连接Ubuntu开发

C后端开发之Sylar学习二&#xff1a;配置VSCode远程连接Ubuntu开发 没错&#xff0c;我不能像大佬那样直接在Ubuntu上面用Vim手搓代码&#xff0c;只能在本地配置一下VSCode远程连接Ubuntu进行开发咯&#xff01; 本篇主要是讲解了VSCode如何配置ssh连接Ubuntu&#xff0c;还有…

无损音乐下载,最新音乐下载,mp3格式音乐下载,一键下载mp3格式音乐,我只用这个软件,歌曲资源丰富,全网音乐免费下载,稳定运行,告别收费

一、软件简介 现在很多支持一键下载mp3音乐/无损音质音乐的音乐播放器通常都是解析接口套了一个壳&#xff0c;一旦解析接口失效&#xff0c;软件就不能下载音乐了&#xff0c;因此一个稳定的解析接口是这类软件最大的保障。本次小编推荐的音乐下载软件接口非常稳定&#xff0…

单片机学习笔记---LED点阵屏的工作原理

目录 LED点阵屏分类 LED点阵屏显示原理 74HC595的介绍 一片74HC595的工作原理 多片级联工作原理 总结 LED点阵屏由若干个独立的LED组成&#xff0c;LED以矩阵的形式排列&#xff0c;以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合&#xff0c;如汽…

第五篇【传奇开心果系列】vant开发移动应用示例:深度解读高度可定制

传奇开心果博文系列 系列博文目录Vant 开发移动应用示例系列 博文目录前言一、Vant高度可定制的重要作用二、样式定制介绍和示例代码三、组件定制介绍和示例代码四、组件库定制介绍和示例代码五、主题定制介绍和示例代码六、语言环境定制介绍和示例代码七、资源加载定制介绍和示…

网络层DoS

网络层是OSI参考模型中的第三层&#xff0c;介于传输层和数据链路层之间&#xff0c;其目的 是实现两个终端系统之间数据的透明传送&#xff0c;具体功能包括&#xff1a;寻址和路由选择、连 接的建立、保持和终止等。位于网络层的协议包括ARP 、IP和ICMP等。下面就 ICMP为例&…

创建一个VUE项目(vue2和vue3)

背景&#xff1a;电脑已经安装完vue2和vue3环境 一台Mac同时安装vue2和vue3 https://blog.csdn.net/c103363/article/details/136059783 创建vue2项目 vue init webpack "项目名称"创建vue3项目 vue create "项目名称"

diffusers单机多卡推理(全网首发)

起因 博主在部署InstantID项目时&#xff0c;显存不够&#xff0c;想要将模型分散在多张卡上。 翻到这篇发现是分布式推理&#xff0c;博主一直以为这个可以达到我想要的效果&#xff0c;但是效果是多线程并行推理&#xff0c;并不能将一个模型切片在多个GPU上。 Distributed …

一起玩儿物联网人工智能小车(ESP32)——57. SPI总线协议初探(一)

摘要&#xff1a;介绍SPI总线的基本知识 前面已经学习过IIC总线协议&#xff0c;今天开始介绍另一个总线协议——SPI。SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是由Motorola提出的一种高速、全双工、同步的通信总线。并且在芯片的管脚…

TI的电量计驱动在卸载时导致Linux卡死

背景 最近移植TI电量计芯片bq40z50的驱动&#xff0c;移植完毕后&#xff0c;能正常读取电池信息了&#xff0c;但是无意中发现驱动卸载会导致Linux卡死&#xff0c;死前终端闪过大量打印&#xff0c;将putty的缓冲区都耗尽了&#xff0c;必须启用syslog转发并用visual syslog…

L1-080 乘法口诀数列

一、题目 二、解题思路 三、代码 #include<iostream> using namespace std; int main() {int a1,a2,n;cin>>a1>>a2>>n;if(n1){cout<<a1;return 0; }int a[n*2];cout<<a1<<" "<<a2;a[0]a1;a[1]a2;for(int i2,j2;i&l…

ubuntu20安装mongodb

方法一&#xff1a;直接安装(命令是直接从mongo官网Install MongoDB Community Edition on Ubuntu — MongoDB Manual复制的&#xff09; cat /etc/lsb-release sudo apt-get install -y gnupg curl curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \sudo gp…