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

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


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

链接: 代码随想录.
思路:石头相撞重量最小,最小的情况就是刚好分为两组大小相同的,这样相撞后重量就为0
所以转化为 重量之和的一半 target容量的背包,尽可能装满,石头的重量和价值都是stones[i]
dp[j] 容量为j的背包最大重量为dp[j]
做题状态:看解析后做出来了

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {//石头相撞重量最小,最小的情况就是刚好分为两组大小相同的,这样重量就为0//所以转化为 重量之和的一半 target容量的背包,尽可能装满,石头的重量和价值都是stones[i]//dp[j] 容量为j的背包最大重量为dp[j]int sum = 0;for(int n : stones){sum+=n;}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-dp[target]-dp[target];}
};

二、494. 目标和

链接: 代码随想录.
思路:

将数组中需要添加+的记为left ,需要添加-的记为right
数组元素中的和为sum,数组元素加了符号后的和为targeet
得到 left+right = sum left-right = target
推导得到 left = (sum+target)/2 如果不能整除,肯定没有解,直接返回0
代入一下示例 left = (5+3)/2 = 4
相当于left的和要凑为4
相当于背包容量为4,从nums中取物品装满背包有多少种方式
dp[j] 表示容量为j的背包,有dp[4]种方式
dp[0] = 1
递推公式 dp[j] += dp[j-nums[i]]

做题状态:看解析后做出来了

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {// 将数组中需要添加+的记为left ,需要添加-的记为right// 数组元素中的和为sum,数组元素加了符号后的和为targeet// 得到 left+right = sum  left-right = target// 推导得到  left = (sum+target)/2  如果不能整除,肯定没有解,直接返回0// 代入一下示例  left = (5+3)/2 = 4// 相当于left的和要凑为4// 相当于背包容量为4,从nums中取物品装满背包有多少种方式// dp[j] 表示容量为j的背包,有dp[4]种方式// dp[0] = 1//  递推公式  dp[j] += dp[j-nums[i]]int sum = 0;for (int n : nums) {sum += n;}if ((sum + target) % 2 == 1 || abs(target) > sum) {return 0;}int temp = (sum + target) / 2;vector<int> dp(temp + 1);dp[0] = 1;for (int i = 0; i < nums.size(); i++) {for (int j = temp; j >= nums[i]; j--) {dp[j] += dp[j - nums[i]];}}return dp[temp];}
};

三、474.一和零

链接: 代码随想录.
思路:一共有str种物品,要同时满足m个0的背包和n个1的背包
做题状态:看解析后做出来了

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;int zero = 0;for (char s : str) {if (s == '1') {one++;} else {zero++;}}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/web/29619.shtml

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

相关文章

【RK3588/算能/Nvidia智能盒子】AI“值守”,规范新能源汽车充电站停车、烟火及充电乱象

近年来&#xff0c;中国新能源汽车高速发展&#xff0c;产量连续8年位居全球第一。根据中国充电联盟数据&#xff0c;截至2023年6月&#xff0c;新能源汽车保有量1620万辆&#xff0c;全国充电基础设施累计数量为665.2万台&#xff0c;车桩比约2.5:1。 虽然新能源汽车与充电桩供…

mysql--安装跳过验证修改密码安全加固

安装mysql 配置mysql的yum源 [rootVM-0-14-rockylinux ~]# tee /etc/yum.repos.d/mysql.repo << EOF > [MYSQL] > namemysql > baseurlhttps://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64 > gpgcheck0 > EOF yum安装mysq…

Playwright工作原理

执行test时&#xff0c;有哪些关键步骤 当我们用Playwright编写一段简单的test script&#xff0c;代码如下所示&#xff1a;在test case中第一段代码就是await page.goto(xxxxx) import { test, expect } from playwright/test;test(test, async ({ page }) > {await page…

浅谈LavelDB

简介 LevelDB 是一个开源的轻量级键值存储库&#xff0c;由 Google 开发&#xff0c;用于提供快速的键值存储和支持读写大量数据。LevelDB 具有高性能、快速的读取和写入速度以及支持原子操作的特点&#xff0c;适合用于需要高效存储和检索键值数据的场景。 LevelDB 主要特点…

NVIDIA新模型Nemotron-4:98%的训练数据是合成生成的,你敢信?

获取本文论文原文PDF&#xff0c;请公众号 AI论文解读 留言&#xff1a;论文解读 标题&#xff1a;Nemotron-4 340B Technical Report 模型概述&#xff1a;Nemotron-4 340B系列模型的基本构成 Nemotron-4 340B系列模型包括三个主要版本&#xff1a;Nemotron-4-340B-Base、…

77道经典的软件测试面试题(答案+文档)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xf…

【ARM-Linux篇】POSIX消息队列

System V消息队列POSIX 消息队列主 要 函 数#include <sys/msg.h> int msgget(key_t key, int oflag) int msgsnd(int msqid, const void * ptr, size_t length, int flag) ssize_t msgrcv (int msqid, void *ptr, size_t length, long type, int flag) int msgctl(int m…

Lua迭代器详解(附加红点功能实例)

Lua迭代器详解与用法 1. 什么是迭代器2. 为什么需要理解迭代器的原理3. 迭代器的实现0. 闭包1. 有状态迭代器2. 无状态迭代器 4. 红点树系统基础 1. 什么是迭代器 迭代器是一种能让我们遍历一个集合中的所有元素的代码结构。比如常用ipairs()和pairs()。 2. 为什么需要理解迭代…

SSH生成SSH密钥(公钥和私钥)

在设置SSH服务时&#xff0c;生成SSH密钥&#xff08;公钥和私钥&#xff09;是一个常见的任务。这些密钥用于安全地进行身份验证&#xff0c;无需输入密码。以下是如何生成SSH密钥的步骤&#xff1a; 1. 生成SSH密钥对 首先&#xff0c;您需要在客户端机器上生成一个SSH密钥…

算法设计与分析期末复习题

一&#xff1a;程序阅读分析题&#xff08;共40分&#xff09; 1.&#xff08;8分&#xff09;阅读“算法1”&#xff0c;分析算法1的功能、时间复杂度。 答案&#xff1a;经典的汉诺塔问题&#xff0c;其目标是将 n 个不同大小的盘子从柱子 A 移动到柱子 C&#xff0c;借助柱…

单例设计模式双重检查的作用

先看双重校验锁的写法 public class Singleton {/*volatile 修饰&#xff0c;singleton new Singleton() 可以拆解为3步&#xff1a;1、分配对象内存(给singleton分配内存)2、调用构造器方法&#xff0c;执行初始化&#xff08;调用 Singleton 的构造函数来初始化成员变量&am…

停车场控制机系统哪家好?捷顺捷曜分体式车场控制机有哪些功能亮点?

停车场控制机为现代城市提供了许多便利和好处。首先&#xff0c;它能够自动记录车辆进出的时间&#xff0c;便于车主和管理人员进行费用计算。其次&#xff0c;通过车牌识别技术&#xff0c;提高了车辆进出的效率&#xff0c;减少了排队等待时间。此外&#xff0c;控制机还可以…

商讯杂志商讯杂志社商讯编辑部2024年第10期目录

案例分享 基于胜任素质的干部选拔和梯队建设体系探讨——以A区卫生健康系统为例 康文雁; 1-4 “家庭五险一金”对居民商业保险购买存在挤出效应——基于江苏省徐州、淮安、泰州三市的实证研究 李炳毅; 5-8 人口老龄化背景下促进徐州市经济高质量发展的探究 李艳秋;…

Python学习笔记12:进阶篇(二),类的继承与组合

类的继承 我们在编写一系列的类的时候&#xff0c;会发现这些类很相似&#xff0c;但是又有各自的特点和行为。在编写这些类的时候&#xff0c;我们可以把相同的部分抽象成一个基类&#xff0c;然后根据其他不同的特点和行为&#xff0c;抽象出子类&#xff0c;继承这个基类。…

上海AI Lab推出8B模型,奥数成绩媲美GPT-4

只用1/200的参数&#xff0c;就能让大模型拥有和GPT-4一样的数学能力&#xff1f; 复旦大学和上海AI实验室的研究团队刚刚研发出了一款具有超强数学能力的模型。 这款模型名为MCTSr&#xff0c;以Llama 3为基础&#xff0c;参数量只有8B&#xff0c;却在奥赛级别的题目上取得了…

Nuxt快速学习开发 -- Nuxt3配置

Nuxt配置 nuxt.config.ts文件位于 Nuxt 项目的根目录下&#xff0c;可以覆盖或扩展应用程序的行为 使用可组合项&#xff0c;这些变量会暴露给应用程序 //nuxt.config.ts import { fileURLToPath } from "url"; ​ export default defineNuxtConfig({alias: {//配置…

android studio项目的gradle提示 java home不一致问题

android项目打开后&#xff0c;gradle提示&#xff1a; Multiple Gradle daemons might be spawned because the Gradle JDK and JAVA_HOME locations are different. Project HuaweiShare is using the following JDK location when running Gradle: D:\Program Files\Android…

Java线程池基本概念

全局和局部线程池 全局线程池 在Spring框架中&#xff0c;全局线程池如ThreadPoolTaskExecutor通常是作为Spring Bean存在的&#xff0c;它们的生命周期由Spring容器管理。当Spring容器关闭时&#xff0c;这些线程池也会被适当地清理和关闭。因此&#xff0c;开发者通常不需要手…

时序预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络时间序列预测

冠豪猪优化长短期记忆神经网络&#xff08;Coronavirus-Enhanced Pig Optimization LSTM&#xff09;是一种应用于时间序列预测的算法。尽管我无法提供具体的实现代码&#xff0c;但我可以为您提供一个基本的框架&#xff0c;用于使用Matlab实现该算法。 以下是使用Matlab实现…

【ZZULIOJ】1106: 回文数(函数专题)

题目描述 一个正整数&#xff0c;如果从左向 右读&#xff08;称之为正序数&#xff09;和从右向左读&#xff08;称之为倒序数&#xff09;是一样的&#xff0c;这样的数就叫回文数。输入两个整数m和n&#xff08;m<n)&#xff0c;输出区间[m&#xff0c;n]之间的回文数。…