代码随想录打卡Day36
今天做的头皮发麻,除了第一道题是自己AC的,剩下两道题目都是看视频才AC的,主要是看了视频也花了很久时间才想清楚。
1049. 最后一块石头的重量 II
这道题一开始没什么思路,但是看到提示说和昨天的分割子集很像,然后我就把思路想出来了。这道题目也是先将数组内元素求和然后除以二,背包的最大容量就设置为sum / 2。和昨天那道题一样的思路,在动态规划的时候让背包尽可能装满就行了。在遍历结束以后,求剩下元素与背包最大价值之间的差值即可。
class Solution {
public:int lastStoneWeightII(vector<int>& stones) {//1.确定dp[i][j]的含义:在背包容量为j,下标为[0, i]的数字组合中的最优方案的最大价值//2.确定递推公式 dp[i][j] = max(dp[j], dp[j - weight[i]] + value[i])//3.dp数组初始化 dp初始化为0向量//4.确定遍历顺序:先物品,再背包(可互换)//5.打印数组(省略)int sum = accumulate(stones.begin(), stones.end(), 0);vector<vector<int>> dp(stones.size(), vector<int>(sum / 2 + 1));//初始化for(int i = 0; i < stones.size(); i++)dp[i][0] = 0;for(int i = 1; i <= sum / 2; i++){if(i >= stones[0]) dp[0][i] = stones[0];else dp[0][i] = 0;}//开始动态规划for(int i = 1; i < stones.size(); i++){for(int j = 1; j <= sum / 2; j++){if(j < stones[i]) dp[i][j] = dp[i - 1][j];else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - stones[i]] + stones[i]);}}return sum - 2 * dp[stones.size() - 1][sum / 2];}
};
494. 目标和
笑死,思路根本就想不到,看了视频才AC的,但是按照视频的思路还是遇到一个测试样例(nums = [0,0,0,0,0,0,0,0,1],target=1)通过不了,想了一下,把遍历条件中的>改成了>=,然后就全部AC了,我觉得这个改动主要还是为了应对这个极端的测试案例,其余情况下用>是可以直接AC的。我发现但凡dp数组元素代表的不是最大价值,如符合条件的组合个数,符合条件的集合长度等,则遍历背包的时候必须要倒序遍历来避免重复问题,这道题目主要就难在dp数组的含义很难构造,且初始化条件很不好想,一旦明确了dp数组的含义和初始条件,递推公式起始很好想。
class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {//1.确定dp[j]的含义:在背包容量为j的情况下,有dp[j]种方法达到指定价值//2.确定递推公式 dp[j] = dp[j] + dp[my_target - j]//3.dp数组初始化 dp[0] = 1//4.确定遍历顺序:先物品,再背包(背包倒序遍历)//5.打印数组(省略)int sum = accumulate(nums.begin(), nums.end(), 0);if(((sum + target) % 2 == 1) || (abs(target) > sum)) return 0; //target取值不合理,达不到//可以达到targetint m = nums.size();int n = (sum + target) / 2;vector<int> dp(n + 1, 0);//初始化dp[0] = 1;//开始动态规划for(int i = 0; i < m; i++){for(int j = n; j >= 0; j--){if(j < nums[i]) continue;dp[j] += dp[j - nums[i]];} }return dp.back();}
};
474.一和零
被这道题爆杀了,刚看到这道题用二维dp数组也不知道该怎么写,这道题的背包容量实际上有两个维度,一个是0的容量,一个是1的容量,题目要求的是符合条件的最大子集长度,并不是直接求最大价值,所以这道题也需要倒序遍历背包,dp数组的含义是:背包最多能装i个0和j个1的情况下,符合条件的子集的最大长度。这道题的初始化很简单,dp[0][0] = 0。递推公式有点难想,如果背包能装下,则装下当前字符串后的子集长度为dp[i - x][j - y] + 1,当然,在遍历的时候需要维护最大长度,所以应该用max函数将其与自身比较。在遍历结束后,直接返回dp[m][n]即可。
class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {//1.确定dp[i][j]的含义:在背包容量最多装i个0和j个1的情况下的最长子集的长度//2.确定递推公式 dp[i][j] = max(dp[i - x][j - y] + 1, dp[i][j])//其中x为当前遍历元素的0的个数,y为当前遍历元素的1的个数//3.dp数组初始化 dp[0] = 1//4.确定遍历顺序:先物品,再背包(背包倒序遍历)//5.打印数组(省略)vector<vector<int>> dp(m + 1, vector<int> (n + 1, 0));//初始化dp[0][0] = 0;//开始动态规划for(string s : strs){ //外层循环遍历字符串(物品)//统计当前字符串的0,1个数int x = 0, y = 0;for(char c : s){if(c == '0') x += 1;else y += 1;}//遍历背包(特殊情况,用两层for循环才能实现)for(int i = m; i >= 0; i--){if(i < x) break;for(int j = n; j >= 0; j--){if(j < y) break;dp[i][j] = max(dp[i - x][j - y] + 1, dp[i][j]);}}}return dp[m][n];}
};
做的破大防啊!!!!!!
相关文章:
代码随想录打卡Day36
今天做的头皮发麻,除了第一道题是自己AC的,剩下两道题目都是看视频才AC的,主要是看了视频也花了很久时间才想清楚。 1049. 最后一块石头的重量 II 这道题一开始没什么思路,但是看到提示说和昨天的分割子集很像,然后我…...
速盾:凡科建站开cdn了吗?
凡科建站是一家专业的建站平台,提供了多种功能和工具来帮助用户快速搭建自己的网站。随着互联网技术的不断发展,网站的访问速度和稳定性成为了越来越重要的考虑因素。为了优化用户体验,提高网站的加载速度,凡科建站已经开启了CDN&…...

python贪吃蛇游戏项目源码【免费】
使用Pygame库实现的贪吃蛇游戏。Pygame是一个用于创建视频游戏的Python模块集合,它提供了图形和声音库,使游戏开发变得容易。 初始化设置 屏幕大小 (SCREEN_WIDTH, SCREEN_HEIGHT): 定义了游戏窗口的宽度和高度。方格大小 (SIZE): 定义了游戏中每个小方…...

Mycat搭建分库分表
分库分表解决的问题 单表数据量过大带来的性能和存储容量的限制的问题: 索引效率下降读写瓶颈存储容量限制事务性能问题分库分表架构 再搭建一对主从复制节点,3307主节点,3309从节点配置数据源 dw1 , dr1,创建集群c1创建逻辑库 CREATE DATAB…...
Python中的数据结构
1.列表 可以将列表理解为一个购物清单,这个清单里面的的每个元素可以是任何类型,并且可以重复(这里区别了列表与数组)。列表用“[]”表示。 #这里定义了一个列表,列表中的元素的类型不同。 lsit_a [a, b, c, 1, 2] …...

mysql笔记8(多表查询)
文章目录 1. union联合查询可能会用到去重操作 2. inner join 内连接3. left join 左连接4. right join 右连接5. cross join 交叉连接6. natural join 自然连接natural left join 自然左连接natural right join 自然右连接自然连接的两张表没有同名字段怎么办? 7. …...
typescript-tsconfig文件解释
ts.config.json 作用 用于标识 TypeScript 项目的根路径用于配置 TypeScript 编译器用于指定编译的文件 重要字段 files - 设置要编译的文件的名称;include - 设置需要进行编译的文件,支持路径模式匹配;exclude - 设置无需进行编译的文件…...
所有用贪心的算法和所有用动态规划(dp)的算法合集
贪心 纯贪心算法(常在普及组中做暴力题正解使用)DijkstraBFS(最短路径)KruskalPrimSollin(Boruvka)二分三分最值排序LCA(纯贪心版) 动态规划(dp) Floyd线性DP区间DP背…...
论文阅读 | 基于流模型和可逆噪声层的鲁棒水印框架(AAAI 2023)
Flow-based Robust Watermarking with Invertible Noise Layer for Black-box DistortionsAAAI, 2023,新加坡国立大学&中国科学技术大学本论文提出一种基于流的鲁棒数字水印框架,该框架采用了可逆噪声层来抵御黑盒失真。 一、问题 基于深度神经网络…...

上线跨境电商商城的步骤
上线一个跨境电商商城涉及多个步骤,从前期准备到上线后的维护。以下是一些关键步骤: 1. 市场调研与规划 目标市场分析:研究目标市场的需求、竞争对手和消费者行为。法律法规:了解并遵守目标市场的法律法规,包括税收、…...

Python基础(七)——PyEcharts数据分析(面向对象版)
四、使用PyEcharts数据分析案例(面向对象版) 【前言:为了巩固之前的Python基础知识(一)到(五),并为后续使用Python作为数据处理的好帮手,我们一起来用面向对象的思想来理…...
滚雪球学SpringCloud[5.1讲]: Spring Cloud Config详解
全文目录: 前言1. Spring Cloud Config的基本概念1.1 微服务配置管理的挑战1.2 Spring Cloud Config的架构 2. 配置服务端与客户端的配置2.1 配置服务端的搭建2.2 配置客户端的搭建2.3 环境隔离配置 3. 配置中心与Git的集成3.1 Git仓库的目录结构设计3.2 配置的版本…...
Unity常用随机数算法
Unity的Random.Range介绍 有两个重载: 如果参数存在至少一个浮点数那么将会触发public static float Range(float minInclusive, float maxInclusive); 返回一个范围内的浮点数(包含首尾) 如果参数都是整形则触发public static int Range(int minInclusive, int maxExclusiv…...
dial unix /var/run/docker.sock: connect: permission denied
要解决 permission denied 错误并授予当前用户 sunyuhua 访问 Docker 的权限,您可以按照以下步骤操作: 1. 检查 Docker 服务是否在运行 首先,确保 Docker 服务已经启动: sudo systemctl start docker sudo systemctl enable do…...
Prompt提示词技巧
文章目录 🍊 探索AI内容创作核心:提示词Prompt1 什么是提示词工程?1.1 提示词的原理1.2 提示词工程师的前景1.3 提示词工程师的门槛是否较低?1.4 提示词的未来展望 2 提示词编写的基本技巧3 常见的提示词框架3.1 CO-STAR框架3.2 BORKE框架3.…...

滑动窗口(6)_找到字符串中所有字母异位词
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 滑动窗口(6)_找到字符串中所有字母异位词 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论Ǵ…...

【无标题】rocket
rocketMQ集群双主双从同步模式(2m-2s-sync)搭建-CSDN博客 集群架构概念 在部署的时候首先要将nameserver启动起来,之后就是将broker启动起来,broker启动起来会将自己的信息注册到nameserver上面。之后再去创建topic,因为发消息的逻辑和收消…...
Maven国内镜像(四种)
配置Maven使用国内镜像是一个常见的做法,因为这样可以显著提高依赖下载的速度并避免网络不稳定带来的问题 在 settings.xml 文件中,需要添加或修改 <mirrors> 标签来指定国内镜像。 以下是几个可用的镜像 1. 阿里云 <mirrors> <mi…...
Linux环境中如何快速修改 JAR 包中的配置文件
在日常的 Java 开发中,我们时常会遇到需要修改 JAR 包中某个配置文件的情况。比如,某些场景下你可能需要调整 application-dev.yml 文件中的配置信息。但解压整个 JAR 包再重新打包会显得比较繁琐。本文将介绍一种快捷的方法,帮助你快速查找并…...

java高频面试题(2024最新)
HashMap使用哪些方法来解决哈希冲突? 使用链地址法(使用散列表)来链接拥有相同hash值的数据;使用2次扰动函数(hash函数)来降低哈希冲突的概率,使得数据分布更平均;引入红黑树进一步…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...