当前位置: 首页 > news >正文

算法笔记|Day31动态规划IV

算法笔记|Day31动态规划IV

  • ☆☆☆☆☆leetcode 1049.最后一块石头的重量II
    • 题目分析
    • 代码
  • ☆☆☆☆☆leetcode 494.目标和
    • 题目分析
    • 代码
  • ☆☆☆☆☆leetcode 474.一和零
    • 题目分析
    • 代码

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

题目链接:leetcode 1049.最后一块石头的重量II

题目分析

此题可以将stones分成两个总和最接近的两个部分,作差即为求得的最小值。若想使两部分最接近,第一部分的总和的目标应设置为target=sum/2,其中sum为集合中各个元素的和。这样可以得到的第一部分最大的总和为dp[target],第二部分的总和为sum-dp[target],差为(sum-dp[target])-dp[target]=sum-dp[target]*2。(注意点dp[target]总是小于target,而target小于等于sum/2)
1.dp数组含义:dp[j]表示总重量不超过j的几个数和的最大值(相当于0-1背包问题中的容量为j的背包最大的价值总和);
2.递推公式:dp[j]=Math.max(dp[j],dp[j-stones[i]]+stones[i])(相当于集合中每个元素的weight和value相同,都是数值stones);
3.初始化:dp[0]=0;
4.遍历顺序:先遍历stones嵌套遍历背包,背包一定是要倒序遍历。

代码

class Solution {public int lastStoneWeightII(int[] stones) {int sum=0;for(int stone:stones)sum+=stone;int target=sum/2;int dp[]=new int[target+1];for(int i=0;i<stones.length;i++){for(int j=target;j>=stones[i];j--)dp[j]=Math.max(dp[j],dp[j-stones[i]]+stones[i]);}return sum-dp[target]*2;}
}

☆☆☆☆☆leetcode 494.目标和

题目链接:leetcode 494.目标和

题目分析

此题可以将nums分成两个两个部分,第一部分为+号,第二部分为-号。记第一部分的总和为left,第二部分的总和为right,注意点应该有left+right=sum①,left-right=target②,这样可以得到第一部分的和为left=(sum+target)/2。考虑若sum+target为奇数或者sum+target<0,则一定没有元素符合题意,返回0。
1.dp数组含义:dp[j]表示填满容量为j(包括j)背包的方法数量;
2.递推公式:dp[j]+=dp[j-nums[i]]
(以dp[j]其中j为5举例,要想填满容量为5的背包,要考虑以下情况:
已经有一个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的背包
那么凑整dp[5]的总方法数也就是把所有的dp[j - nums[i]]累加起来);
3.初始化:dp[0]=1;(考虑把容量为0也当做一种方法,这样可以递推得到其他结果。若dp[0]是0,递推结果将都是0)
4.遍历顺序:先遍历数字嵌套遍历背包,背包一定是要倒序遍历。

代码

class Solution {public int findTargetSumWays(int[] nums, int target) {int sum=0;for(int num:nums)sum+=num;if((target+sum)%2==1||target+sum<0)return 0;int left=(target+sum)/2;int dp[]=new int[left+1];dp[0]=1;for(int i=0;i<nums.length;i++){for(int j=left;j>=nums[i];j--){dp[j]+=dp[j-nums[i]];}}return dp[left];}
}

☆☆☆☆☆leetcode 474.一和零

题目链接:leetcode 474.一和零

题目分析

此题可以视为一个装满0的容量为m、装满1的容量为n的背包,可以装多少个物品(也就是字符串),每个字符串的重量也就是字符串中0和1的数量,每个字符串的价值是1(加入个数即加一),相当于一个二维的背包。
1.dp数组含义:dp[i][j]表示最多有i个0和j个1的strs的最大子集的元素个数;
2.递推公式:dp[i][j]=Math.max(dp[i-x][j-y]+1,dp[i][j]);(其中x为当前字符串中0的个数,y为当前字符串中1的个数,x和y相当于物品的重量,物品的价值为1相当于计数);
3.初始化:dp[0][0]=0;
4.遍历顺序:先遍历物品(字符串)嵌套遍历背包,背包一定是要倒序遍历。

代码

class Solution {public int findMaxForm(String[] strs, int m, int n) {int dp[][]=new int[m+1][n+1];for(String str:strs){int x=0,y=0;for(char s:str.toCharArray()){if(s=='0')x++;elsey++;}for(int i=m;i>=x;i--){for(int j=n;j>=y;j--)dp[i][j]=Math.max(dp[i-x][j-y]+1,dp[i][j]);}}return dp[m][n];}
}

相关文章:

算法笔记|Day31动态规划IV

算法笔记|Day31动态规划IV ☆☆☆☆☆leetcode 1049.最后一块石头的重量II题目分析代码 ☆☆☆☆☆leetcode 494.目标和题目分析代码 ☆☆☆☆☆leetcode 474.一和零题目分析代码 ☆☆☆☆☆leetcode 1049.最后一块石头的重量II 题目链接&#xff1a;leetcode 1049.最后一块石…...

CSS文字方向控制属性text-orientation

在CSS中&#xff0c;text-orientation 属性主要用于控制文本的方向&#xff0c;特别是当文本被设置为垂直排列时。这个属性主要用于东亚语言的排版&#xff0c;比如中文、日文和韩文&#xff0c;这些语言在垂直书写时&#xff0c;字符的排列方向可能与拉丁文字不同。 text-ori…...

配置typora上传图片到Chevereto图床

目录 一、下载安装PicGo二、配置PicGo三、配置Typora 一、下载安装PicGo PicGo下载地址点击进入 进入官网后点击下载&#xff0c;会跳转到GitHub,如图,选择对应的操作系统版本下载 下载完成后单击安装&#xff08;本文已windows系统为例&#xff09; 二、配置PicGo 点击插件设…...

Java面试八股之如何保证消息队列中消息不重复消费

如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费&#xff0c;通常需要从以下几个方面来着手&#xff1a; 消息确认机制&#xff1a; 对于像RabbitMQ这样的消息队列系统&#xff0c;可以使用手动确认&#xff08;manual acknowledge&#xff09;机制来…...

0.91寸OLED迷你音频频谱

一、简介 音频频谱在最小0.91寸OLED 屏幕上显示&#xff0c;小巧玲珑 二、应用场景 本模块为音频频谱显示模块&#xff0c;用来获取声音频谱并展示频谱&#xff0c;跟随音乐声音律动 三、产品概述 基于主控芯片设计的将声音采集分析频谱&#xff0c;显示到0.91寸OLED的功能…...

机器学习--特征工程常用API

1. DictVectorizer - 字典特征提取 DictVectorizer 是一个用于将字典&#xff08;如Python中的字典对象&#xff09;转换为稀疏矩阵的工具&#xff0c;常用于处理类别型特征。 DictVectorizer(sparseTrue, sortTrue, dtype<class numpy.float64>)参数&#xff1a; spar…...

块级LoRA:个性化与风格化在文本到图像生成中的新突破

人工智能咨询培训老师叶梓 转载标明出处 文本到图像生成技术的核心目标是教会预训练模型根据输入的文本提示生成具有特定主题和风格的新颖图像。尽管已有多种微调技术被提出&#xff0c;但它们在同时处理个性化和风格化方面仍存在不足&#xff0c;导致生成的图像在个人身份和风…...

redis的数据结构——压缩表(Ziplist)

压缩表(Ziplist)是Redis中一种紧凑的数据结构,主要用于节省内存。它通常被用于存储少量的字符串或小整数,尤其在列表类型(List)和哈希类型(Hash)中。当数据量较小或数据本身占用内存较少时,Redis会选择用压缩表来存储数据,以减少内存开销。 压缩表的基本结构 压缩表…...

探索未知,悦享惊喜 —— 您的专属盲盒一番赏小程序盛大开启

在这个充满奇遇与惊喜的时代&#xff0c;每一份未知都蕴藏着无限可能。为了将这份独特的乐趣带到您的指尖&#xff0c;我们精心打造了“悦赏盲盒”小程序&#xff0c;一个集潮流、趣味、收藏于一体的全新互动平台&#xff0c;让每一位用户都能享受到拆盲盒的乐趣&#xff0c;发…...

dompdf导出pdf中文乱码显示问号?

环境&#xff1a;PHP 8.0 框架&#xff1a;ThinkPHP 8 软件包&#xff1a;phpoffice/phpword 、dompdf/dompdf 看了很多教程&#xff08;包括GitHub的issue、stackoverflow&#xff09;都没有解决、最终找到解决问题的根本&#xff01; 背景&#xff1a;用Word模板做转PDF…...

韩顺平Java-第二十四章:MYSQL基础篇

一 数据库 1 数据库简单原理图 2 使用命令行窗口连接MYSQL数据库 &#xff08;1&#xff09;mysql -h 主机名 -P 端口 -u 用户名 -p密码&#xff1b; &#xff08;2&#xff09;登录前&#xff0c;保证服务启动。 3 MySQL三层结构 &#xff08;1&#xff09;所谓安装MySQL数…...

【动态规划算法题记录】最长/最大 问题汇总 (leetcode)

目录 32. 最长有效括号思路代码 300. 最长递增子序列思路代码 674. 最长连续递增序列思路1&#xff1a;双指针代码1&#xff1a;双指针思路2&#xff1a;dp代码2&#xff1a;dp 718. 最长重复子数组思路1&#xff1a;dp代码1&#xff1a;dp思路2&#xff1a;dp优化代码2&#x…...

2020 位示图

2020年网络规划设计师上午真题解析36-40_哔哩哔哩_bilibili 假设某计算机的字长为32位&#xff0c;该计算机文件管理系统磁盘空间管理采用位示图&#xff08;bitmap&#xff09;&#xff0c;记录磁盘的使用情况。若磁盘的容量为300GB&#xff0c;物理块的大小为4MB&#xff0c;…...

富格林:防止陷入黑幕欺诈平台

富格林指出&#xff0c;不少投资者因未做好投资准备而不慎误入黑幕欺诈平台&#xff0c;造成了不必要的亏损。投资者在投资前&#xff0c;需要时刻保持警惕&#xff0c;根据市场行情&#xff0c;作出有依据的投资决定&#xff0c;而不是依赖黑幕欺诈平台的噱头进行投资。建议投…...

Cookie、Session 、token

Cookie 优点: 简单易用: 浏览器自动管理 Cookie 的发送和接收。持久性: 可以设置过期时间&#xff0c;使其可以在浏览器关闭后依旧存在。广泛支持: 所有现代浏览器都支持 Cookie。 缺点: 安全性问题: 存储在客户端&#xff0c;容易被查看和篡改。敏感信息不应直接存储在 Co…...

Json-类型映射使用TypeFactory或者TypeReference

当你需要将JSON数据转换为Java中的复杂类型时,可以使用Jackson库中的TypeFactory或 者TypeReference。这两种方式可以帮助你处理复杂的泛型类型,例如 List<Map<String, Object>> 或者 Map<String, List<Object>>。 示例 1: 使用 TypeFactory 和 T…...

Linux shell编程学习笔记73:sed命令——沧海横流任我行(上)

0 前言 在大数据时代&#xff0c;我们要面对大量数据&#xff0c;有时需要对数据进行替换、删除、新增、选取等特定工作。 在Linux中提供很多数据处理命令&#xff0c;如果我们要以行为单位进行数据处理&#xff0c;可以使用sed。 1 sed 的帮助信息&#xff0c;功能&#xff…...

内网渗透之icmp隧道传输

原理 # 为什么要建立隧道 在实际的网络中&#xff0c;通常会通过各种边界设备软/硬件防火墙、入侵检测系统来检查对外连接的情况&#xff0c;如果发现异常&#xff0c;会对通信进行阻断。 ​ # 什么是隧道 就是一种绕过端口屏蔽的方式&#xff0c;防火墙两端的数据包通过防火墙…...

【C++ 第十五章】map 和 set 的封装(封装红黑树)

1. map 和 set 的介绍 ⭐map 与 set 分别是STL中的两种序列式容器; 它们是一种树形数据结构的容器&#xff0c;且其的底层构造为一棵红黑树; 而在上一篇文章中提到,其实红黑树本身就是一棵二叉搜索树,是基于二叉搜索树的性质对其增加了平衡的属性来提高其综合性能 ⭐当然也…...

LIN通讯

目录 1 PLinApi.h 2 TLINFrameEntry 结构体 3 自定义函数getTLINFrameEntry 4 TLINScheduleSlot 结构体 5 自定义函数 getTLINScheduleSlot 6 自定义LIN_SetScheduleInit函数 7 自定义 LIN_StartSchedule 8 发送函数 9 线程接收函数 1 PLinApi.h 这是官方头文件 ///…...

zabbix常见架构及组件

Zabbix作为一个开源的、功能全面的监控解决方案&#xff0c;广泛应用于各类组织中&#xff0c;以实现对网络、服务器、云服务及应用程序性能的全方位监控。部署架构灵活性高&#xff0c;可支持从小型单一服务器环境到大型分布式系统的多种场景。基本架构通常包括监控端&#xf…...

plsql表格怎么显示中文 plsql如何导入表格数据

在Oracle数据库开发中&#xff0c;PL/SQL Developer是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了丰富的功能来帮助开发人员高效地进行数据库开发和管理。在使用PL/SQL Developer时&#xff0c;许多用户会遇到表格显示中文的问题&#xff0c;以…...

chromedriver下载地址大全(包括124.*后)以及替换exe后仍显示版本不匹配的问题

Chrome for Testing availability CNPM Binaries Mirror 若已经更新了系统环境变量里的chromdriver路径下的exe&#xff0c;仍显示版本不匹配&#xff1a; 则在cmd界面输入 chromedriver 会跳出version verison与刚刚下载好的exe不匹配&#xff0c;则再输入&#xff1a; w…...

拦截器实现 Mybatis Plus 打印含参数的 SQL 语句

1.实现拦截器 package com.sample.common.interceptor;import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import or…...

Oracle Subprogram即Oracle子程序

Oracle Subprogram&#xff0c;即Oracle子程序&#xff0c;是Oracle数据库中存储的过程&#xff08;Procedures&#xff09;和函数&#xff08;Functions&#xff09;的统称。这些子程序是存储在数据库中的PL/SQL代码块&#xff0c;用于执行特定的任务或操作。下面详细介绍Orac…...

自然语言处理实战项目30-基于RoBERTa模型的高精度的评论文本分类实战,详细代码复现可直接运行

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目30-基于RoBERTa模型的高精度的评论文本分类实战,详细代码复现可直接运行。RoBERTa模型是由 Facebook AI Research 和 FAIR 的研究人员提出的一种改进版的 BERT 模型。RoBERTa 通过采用更大的训练数据集、动态掩码机…...

RK3588J正式发布Ubuntu桌面系统,丝滑又便捷!

本文主要介绍瑞芯微RK3588J的Ubuntu系统桌面演示&#xff0c;开发环境如下&#xff1a; U-Boot&#xff1a;U-Boot-2017.09 Kernel&#xff1a;Linux-5.10.160 Ubuntu&#xff1a;Ubuntu20.04.6 LinuxSDK&#xff1a; rk3588-linux5.10-sdk-[版本号] &#xff08;基于rk3…...

基于GPT-SoVITS的API实现批量克隆声音

目标是将每一段声音通过GPT-SoVITS的API的API进行克隆,因为拼在一起的整个片段处理会造成内存或者缓存溢出。 将目录下的音频文件生成到指定目录下,然后再进行拼接。 通过AI工具箱生成的数据文件是这样的结构,temp目录下是没个片段生成的部分,connect_是正常拼接的音频文件…...

详解华为项目管理,附华为高级项目管理内训材料

&#xff08;一&#xff09;华为在项目管理中通过有效的沟通、灵活的组织结构、坚持不懈的努力、细致的管理和科学的考核体系&#xff0c;实现了持续的创新和发展。通过引进先进的管理模式&#xff0c;强调以客户需求为导向&#xff0c;华为不仅优化了技术管理和项目研发流程&a…...

Perl(Practical Extraction and Reporting Language)脚本

Perl&#xff08;Practical Extraction and Reporting Language&#xff09;是一种非常灵活的脚本语言&#xff0c;主要用于文本处理、系统管理以及快速原型开发等领域。Perl 脚本可以用来执行一系列任务&#xff0c;包括文件操作、网络通信、数据处理等。 下面是一些关于编写…...

怎么做根优酷差不多的网站/视频广告

一般编程题&#xff0c;稍加思考可以推出&#xff1a; (1) 从任意一个位置开始&#xff0c;如果能坐上所有位置&#xff0c;则从其他位置开始同样可以 (2) 1的否命题也成立 指定从 \((0, 0)\) 开始&#xff0c;编程模拟坐的过程即可判断Possible还是Impossible。 【优化】 \(m\…...

双公示网站专栏建设/武汉百度推广公司

Java语言提供了很多修饰符&#xff0c;主要分为以下两类&#xff1a;访问修饰符非访问修饰符修饰符用来定义类、方法或者变量&#xff0c;通常放在语句的最前端。我们通过下面的例子来说明&#xff1a; public class className { // ...}private boolean myFlag;static final…...

长沙知名网站推广/seo优缺点

最近在网上看到一篇介绍android window的requestWindowFeature()的使用方法&#xff0c;共享出来大家学习学习 requestWindowFeature(Window.FEATURE_LEFT_ICON);setContentView(R.layout.dialog_activity);getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,…...

有口碑的盐城网站建设/广州seo优化

一、解释器 python / python3 Python 的解释器 # 使用 python 2.x 解释器 $ python xxx.py # 使用 python 3.x 解释器 $ python3 xxx.py 在windows下用python解释器执行的方式&#xff1a; 1&#xff09;Win R打开dos命令行窗口 2&#xff09;键入python xxx.py即可运行xxx.…...

网站备案要如何取消/南京seo收费

一、模板概述定制数据结构模板&#xff0c;这当然比直接分析16进制的原始数据要方便得多&#xff0c;而且不容易出错。你编辑好数据结构模板保存后&#xff0c;数据模板就生效了。这样你就可以分析来自硬盘、内存等一些数据&#xff0c;这些数据将套用你数据结构模板来显示数据…...

个体户做网站有用吗/新浪nba最新消息

2021年4月19日&#xff0c;今天的心情有些复杂&#xff0c;因为旁边工位上的一个同事离职了&#xff0c;平时中午一般会一起出去吃饭&#xff0c;有什么工作上的问题一般都会向他请教&#xff0c;他的学习能力很强&#xff0c;会的东西也很多&#xff0c;但是他还是离开我们公司…...