代码随想录算法训练营第四十三天【动态规划part05】 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

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

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

等于把石头尽量分成重量相同的两堆

动规五部曲

  1. 确定dp数组及其下标含义:容量为j的背包,最多能装下的最大重量为dp[j]
  2. 确定递推公式:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);
  3. dp数组的初始化:重量不会是负数,全部初始化为0即可
  4. 确定遍历顺序:先物品,再背包,且遍历背包要倒序
  5. 举例推导dp数组:以[2,4,1,1]为例,如图。最后相撞后的结果为sum-2*dp[target]

代码:

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for (int i : stones) sum += i;int target = sum / 2;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)官网 - 全球极客挚爱的技术成长平台

求解思路:

等于求有多少种不同的组合方式,能组合成和为left的子集(装满这个背包有几种方法)

动规五部曲

  1. dp数组及其下标含义:填满j(包括j)这么大容积的包,有dp[j]种方法
  2. 确定递推公式:dp[j] += dp[j - nums[i]],举例说明如下,凑整dp[5]的方法就是把所有的dp[j - nums[i]]累加
    • 已经有一个1(nums[i]) 的话,有 dp[4]种方法 凑成 容量为5的背包。
    • 已经有一个2(nums[i]) 的话,有 dp[3]种方法 凑成 容量为5的背包。
    • 已经有一个3(nums[i]) 的话,有 dp[2]中方法 凑成 容量为5的背包
    • 已经有一个4(nums[i]) 的话,有 dp[1]中方法 凑成 容量为5的背包
    • 已经有一个5 (nums[i])的话,有 dp[0]中方法 凑成 容量为5的背包
  3. 初始化:dp[0] = 1,dp[0]是递推结果的起源
  4. 遍历顺序:先物品,再背包,背包要倒序
  5. 举例推导dp数组:nums: [1, 1, 1, 1, 1],target = 3,此时bagSize = 4,如图

代码:

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;for (int i : nums) sum += i;// 两种特殊情况if (abs(target) > sum) return 0;if ((target + sum) % 2 == 1) return 0;int bagSize = (target + sum) / 2;// 填满j(包括j)这么大容积的包,有dp[j]种方法vector<int> dp(bagSize+1, 0);// 初始化dp[0] = 1;for (int i = 0; i < nums.size(); i++){for (int j = bagSize; j >= nums[i]; j--){dp[j] += dp[j-nums[i]];}}return dp[bagSize];}
};

474.一和零

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

动规五部曲

  1. 确定dp数组及其下标含义:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]
  2. 递推公式:dp[i][j] 可以由前一个strs里的字符串推导出来,strs里的字符串有zeroNum个0,oneNum个1,则 dp[i][j] = dp[i - zeroNum][j - oneNum] + 1,注意和dp[i][j]本身比较,取较大的值;字符串的zeroNum和oneNum相当于物品的重量(weight[i]),字符串本身的个数相当于物品的价值(value[i]),即01背包问题,不过重量有两个维度
  3. 初始化:物品价值不会为负数,因此全部初始化为0
  4. 遍历顺序:先物品,后背包,背包倒序;注意物品是strs里的字符串,背包是题目中的m和n
  5. 举例推导:以 ["10","0001","111001","1","0"],m = 3,n = 3为例,如图

代码:

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {// 初始化vector<vector<int>> dp(m+1, vector<int> (n+1, 0));for (string str : strs){ // 遍历物品int one = 0, zero = 0;for (char c : str){if (c == '0') zero ++;else one++;}// 遍历背包(倒序遍历)for (int i = m; i >= zero; i--){for (int j = n; j >= one; j--){dp[i][j] = max(dp[i][j], dp[i-zero][j-one] + 1);}}}return dp[m][n];}
};

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

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

相关文章

logstash安装和使用

官网&#xff1a;https://www.elastic.co/cn/logstash/ 1.上传Linux安装包 2.解压安装包且重命名 [rootVM-4-10-centos logstash]# tar -zxvf logstash-8.11.1-linux-x86_64.tar.gz -C ../software/[rootVM-4-10-centos logstash]# mv logstash-8.11.1/ logstash3.启动测试 …

国产遥感影像处理软件 GSRS,真是很方便

兼容国内外绝大多数卫星遥感影像格式&#xff1b;高效的影像查看&#xff0c;比如漫游、放大、缩小、查看影像像素灰度值、影像地理坐标、影像投影坐标系等等&#xff1b;人机交互影像裁剪&#xff0c;任何绘制裁剪区域&#xff0c;输出裁剪影像&#xff1b;具备影像基本处理功…

基于Haclon的Blob分析

任务要求&#xff1a; 请用BLOB分析的方法计算图中所有灰度值在120和255之间的像素构成的8连通区域的面积与中心点坐标。 Blob基础&#xff1a; 分析过程&#xff1a;首先获取图像&#xff0c;然后根据特征对原始图像进行阈值分割&#xff08;区分背景像素和前景像素&#xf…

洛谷 P4552 [Poetize6] IncDec Sequence

挺好的一道思维题。 分析 因为是对区间修改&#xff0c;多次修改肯定会超时&#xff0c;很容易想到差分。 那么原题的对区间修改就可以转换为下面三个操作&#xff08;均在差分数组中&#xff09;&#xff1a; 1. 任选一个数1 2. 任选一个数-1 3. 任选两个数1和-1 进一步考…

贪心算法及相关例题

目录 什么是贪心算法&#xff1f; leetcode455题.分发饼干 leetcode376题.摆动序列 leetcode55题.跳跃游戏I leetcode45题.跳跃游戏II leetcode621题.任务调度器 leetcode435题.无重叠空间 leetcode135题.分发糖果 什么是贪心算法&#xff1f; 贪心算法更多的是一种思…

《QT从基础到进阶·三十七》QWidget实现左侧导航栏效果

NavigationBarPlugin插件类实现了对左侧导航栏的管理&#xff0c;我们可以在导航栏插件中添加界面&#xff0c;并用鼠标点击导航栏能够切换对应的界面。 源码在文章末尾 实现效果如下&#xff1a; NavigationBarPlugin实现的接口如下&#xff1a; class NAVIGATIONBAR_EXP…

【brpc学习实践六】backup request场景案例

应用场景 有时为了保证可用性,需要同时访问两路服务,哪个先返回就取哪个。在brpc中,这有多种做法,根据server是否挂在同一个命名服务内有所区别。 当后端server可以挂在一个命名服务内时 Channel开启backup request。这个Channel会先向其中一个server发送请求,如果在Ch…

C#,数值计算——插值和外推,多项式插值与外推插值(Poly_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 多项式插值与外推插值 /// Polynomial Interpolation and /// Extrapolation interpolation routines for one dimension /// </summary> public class Poly…

【ES6.0】- Promise对象

【ES6.0】- Promise对象 文章目录 【ES6.0】- Promise对象一、概述二、Promise状态三、Promise方法3.1 Promise.prototype.then方法&#xff1a;链式操作3.2 Promise.prototype.catch方法&#xff1a;捕捉错误3.3 Promise.race方法&#xff1a;捕捉错误3.4 Promise.any()3.5 Pr…

第三节-Android10.0 Binder通信原理(三)-ServiceManager篇

1、概述 在Android中&#xff0c;系统提供的服务被包装成一个个系统级service&#xff0c;这些service往往会在设备启动之时添加进Android系统&#xff0c;当某个应用想要调用系统某个服务的功能时&#xff0c;往往是向系统发出请求&#xff0c;调用该服务的外部接口。在上一节…

广告机/商业显示屏_基于MT878安卓主板方案

安卓主板在广告机领域扮演着重要的角色。无论是在商场、车站、酒店、电梯、机场还是高铁站&#xff0c;LED广告机广泛应用&#xff0c;并通过不同方式进行播放和管理。 广告机/商业显示屏_基于MT878安卓主板方案 基于MT8788安卓主板方案的广告机采用了联发科MT8788八核芯片方案…

对比两个数组中对应位置的两个元素将每次对比的最大值用于构成新的数组np.maximum()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对比两个数组中对应位置的两个元素 将每次对比的最大值用于构成新的数组 np.maximum() 选择题 以下代码的输出结果为&#xff1f; import numpy as np a1 [1,2,33] a2 [11,2,3] print("…

Axios 默认配置 简化URL 简化代码 多台服务器接口配置

main.js配置 import Axios from axios Axios.defaults.method GET//设置默认的请求类型 Axios.defaults.baseURL https://apis.jxcxin.cn/api//设置接口地址 Axios.defaults.params { token: abc } //每次请求都带上这个参数 Axios.defaults.timeout 5000 //请求的超时时间…

MATLAB - text的两种使用方法

text小技巧 1. 常规使用&#xff08;Method 1&#xff09;2. 在显示画面的相对位置&#xff08;Method 2&#xff09;3. 举个例子 1. 常规使用&#xff08;Method 1&#xff09; text(x,y,txt)2. 在显示画面的相对位置&#xff08;Method 2&#xff09; text(string,‘ABC’,…

使用websocket获取thingsboard设备的实时数据

背景 有一个读者前来咨询,如何实时获取设备的遥测数据。 其实tb是有提供websocket接口来获取设备数据的。而且还支持js跨域调用。下面给大家演示一下。 websocket地址 完整代码 <!DOCTYPE HTML> <html><h

HTTP协议和WebSocket协议之间的区别

HTTP协议和WebSocket协议之间的主要区别在于它们的设计目的和通信方式。 HTTP协议是一种无状态的协议&#xff0c;它的主要设计目的是用于从Web服务器传输超文本到本地浏览器的传输协议。HTTP协议使用请求和响应模型&#xff0c;客户端向服务器发送请求&#xff0c;服务器返回…

【Java并发编程十二】线程池

线程池 用来统一地管理线程&#xff0c;避免线程的重复创建与销毁。使用线程池可以让执行完的线程回到线程池&#xff0c;等待下一次调用。 import jdk.jshell.EvalException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import j…

Matplotlib颜色条的配置_Python数据分析与可视化

Matplotlib颜色条配置 基本颜色颜色条选择配色方案颜色条刻度的限制与扩展功能的设置离散型颜色条 基本颜色 Matplotlib提供了8种指定颜色的方法&#xff1a; 在[0&#xff0c;1]中的浮点值的RGB或RGBA元组&#xff08;例如 (0.1, 0.2, 0.5) 或&#xff08;0.1&#xff0c; 0.…

C语言中文网 - Shell脚本 - 9

第1章 Shell基础(开胃菜) 9. Shell修改命令提示符 Shell 通过PS1和PS2这两个环境变量来控制提示符的格式,修改PS1和PS2的值就能修改命令提示符的格式。 PS1 控制最外层的命令提示符格式。 PS2 控制第二层的命令提示符格式。 在修改 PS1 和 PS2 之前,我们先用 echo 命令输出…

contos7中mongodb数据库无法备份与还原,数据库工具的安装

由于之前数据库没有卸载干净&#xff0c;导致直接用sudo yum install -y mongodb-org-tools命令无法直接安装&#xff0c;只能选择手动安装了。 先去官网找到mongo-tool工具 MongoDB Database Tools Downloads | MongoDB 然后复制要下载的版本的地址。 然后直接用wget来下载 …