动态规划的时间复杂度优化

作者推荐

视频算法专题

本文涉及知识点

动态规划汇总

优化动态规划的时间复杂度,主要有如下几种:

一,不同的状态表示。

比如:n个人,m顶帽子。
第一种方式:dp[i][mask] ,i表示前i个人已经选择帽子,mask 表示 那些帽子已经选择。 空间复杂度:O(n2m)。
第二种方式:dp[i][mask] ,i表示前i个帽子已经选择,mask表示那些人已经选择。 空间复杂度:O(m22)。
n大,则现在方式一;否则选择方式二。

【状态压缩】【动态规划】【C++算法】1125.最小的必要团队

二,通过优化状态减少状态数

例一

【动态规划】【C++算法】2518. 好分区的数目
num的长度 ∈ \in [1,1000],num[i] ∈ \in [0,106] k ∈ \in [0,1000]。
将num的元素放到两个数组中,两个数组的和都为k。
由于num[i] >=0,所以 数组和已经大于k 的无论如何都不会等于k,抛弃。
dp[k1][k2] 的状态数是固定。
当处理完 n u m [ 0 , i ) 时 , 两个数组的和是固定    ⟺    k 1 + k 2 ≡ ∑ j : 0 i − 1 n u m s [ j ] 当处理完num[0,i)时,两个数组的和是固定 \iff k1+k2 \equiv \sum\Large_{j:0}^{i-1} nums[j] 当处理完num[0,i),两个数组的和是固定k1+k2j:0i1nums[j]
我记录k1或k2就可以了。新问题是k1 可能是5e8。
{ k 1 k 1 < k − m i n ( k 2 , k ) e l s e \begin{cases} k1 & k1 <k \\ -min(k2,k) & else \\ \end{cases} {k1min(k2,k)k1<kelse

例子二

2742. 给墙壁刷油漆
付费工人,各任务用时time[i],免费工人用时1,time.length ∈ \in [1,500]。付费工人用时和必须大于等于免费工人用时。如果分别记录付费工人和免费工人用时,则状态数:500*500。
付费工人用时和必须大于等于免费工人    ⟺    \iff (statu = 付费工人用时 - 免费工人用时) >= 0
statu ∈ \in [-500,500] 可以记录状态的时候+500,解析状态的时候再-500。

三 通过优化转移方程

转移方程主要有两种:
a,枚举前置状态,更新后置状态。除剪枝小幅提升性能外,暂时没发现优化方法。
b,枚举后置状态,通过前置状态计算后置状态。利用前缀和、极值、优先队列(堆)、单调栈(队列、向量)、预处理 等优化。

2617 网格图中最少访问的格子数两种方法:分别用单调栈、优先队列优化
【动态规划】【滑动窗口】【C++算法】 629K 个逆序对数组前缀和
【动态规划】【状态压缩】【2次选择】【广度搜索】1494. 并行课程 II枝小幅提升性能
【动态规划】【C++算法】1563 石子游戏 V极值

四 匹配无限次可以拆分成匹配0次和1次

以通配符为例。
abc 匹配 *
初始匹配长度0
处理* :
长度0的后置状态:*不匹配任何字符,匹配长度0。
长度0的后置状态:*匹配一个字符,匹配长度1。
长度1的后置状态:*不匹配任何字符,匹配长度1。
长度1的后置状态:*匹配一个字符,匹配长度2。
⋮ \quad \quad \vdots
总计: *可以匹配0到无限字符,才可以这样处理。 .只能匹配一个字符不能这样处理。

【动态规划】【字符串】C++算法:正则表达式匹配

【状态压缩】【动态规划】【C++算法】691贴纸拼词
【动态规划】【数学】【C++算法】1449. 数位成本和为目标值的最大数字
【动态规划】【C++算法】2188. 完成比赛的最少时间

五 逆向思考

【动态规划】【 矩阵】【逆向思考】C++算法174地下城游戏
正向思考:要记录进入(r,c)后的健康,还有记录初始健康。比如:路径一: 3 → \rightarrow -2 ,初始只需要1,最终健康2。
路径二: -1 → \rightarrow 4 ,初始要求 2,最终健康度 5。如果终点格是-1,前者能过。 如果是-4,后者能过。前者需要4,才能过。
{ 路径一初始 1 ,路径二初始 2 终点 < − 1 路径一初始 4 ,路径二初始 2 终点 − 4 \begin{cases} 路径一初始1,路径二初始2 & 终点< -1 \\ 路径一初始4,路径二初始2 & 终点-4 \\ \end{cases} {路径一初始1,路径二初始2路径一初始4,路径二初始2终点<1终点4

【动态规划】【C++算法】741摘樱桃

六 去掉重复

【动态规划】C++算法:403.青蛙过河

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关

下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 **C+

+17**
如无特殊说明,本算法用**C++**实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

听李国武老师讲帕累托图

一、帕累托图是什么&#xff1f; 帕累托图是一种特殊的图表&#xff0c;它以二维的方式展示数据&#xff0c;通过将数据按照两个特定的维度进行分类和排序&#xff0c;帮助我们更好地理解和分析数据。 二、如何使用帕累托图&#xff1f; 确定两个分类维度&#xff1a;首先&am…

力扣--动态规划1014.最佳观光组合

思路分析: 初始化左侧景点的评分为第一个景点的评分&#xff0c;最终结果为0。从第二个景点开始遍历数组。对于每个景点&#xff0c;计算当前观光组合的得分&#xff0c;即当前景点的评分 左侧景点的评分 - 两者之间的距离。更新最终结果为当前得分和之前结果的较大值。更新左…

数据结构:链表的冒泡排序

法一&#xff1a;修改指针指向 //法二 void maopao_link(link_p H){if(HNULL){printf("头节点为空\n");return;}if(link_empty(H)){printf("链表为空\n");return;}link_p tailNULL;while(H->next->next!tail){link_p pH;link_p qH->next;while(q…

探索创意的无尽宇宙——Photoshop 2020,你的视觉魔法棒

在数字艺术的广阔天地中&#xff0c;Photoshop 2020无疑是一颗璀璨的明星。这款由Adobe公司精心打造的图像处理软件&#xff0c;自推出以来&#xff0c;便以其强大的功能和卓越的性能&#xff0c;赢得了全球数百万设计师、摄影师和爱好者的青睐。无论是Mac还是Windows系统&…

UE引擎, 在create blueprint from selection中, 点击select卡死问题处理

1. bug场景 在创建子类时点击select&#xff0c; ue会直接冻结无法点击 2. 解决方案 点击“Edit” -> “Edit Preference” 选择Asset Editor Open Location的选项从默认改为“Main Window”即可解决问题 3. 问题产生的原因 原因是UE的弹窗在拓展显示器或者笔记本显示…

DIY制作耳机壳时使用哪一种胶粘剂性价比最高?

选择性价比最高的胶粘剂需要根据具体的应用场景和需求来确定。不同的胶粘剂有不同的特点和使用范围&#xff0c;因此其性价比也不同。 一般来说&#xff1a; 如果需要快速粘合、透明度高、粘合力强的场景&#xff0c;可以选择UV树脂胶&#xff1b; 如果需要高温、高强度的粘合…

复合式统计图绘制方法(1)

复合式统计图绘制方法&#xff08;1&#xff09; 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制&#xff0c;饼图环形图绘制较难。 在统计图的应用方面&#xff0c;有时候有两个关联的统计学的样本值要用统计图来表达&#xff0…

Webserver解决segmentation fault(core dump)段错问问题

前言 在完成了整个项目后&#xff0c;我用make命令编译了server&#xff0c;当我运行./server文件时&#xff0c;出现了段错误 在大量的代码中找出错因并不是一件容易的事&#xff0c;尤其是对新手程序员来说。而寻找bug的过程就像是侦探调查线索追查凶手一样&#xff0c;我们…

GO语言基础总结

多态&#xff1a; 定义一个父类的指针&#xff08;接口&#xff09;&#xff0c;然后把指针指向子类的实例&#xff0c;再调用这个父类的指针&#xff0c;然后子类的方法被调用了&#xff0c;这就是多态现象。 Golang 高阶 goroutine 。。。。。 channel channel的定义 …

【JVM】聊聊JVM生产环境常见的OOM问题

对于JVM来说&#xff0c;因为划分有固定的区域来执行字节码文件&#xff0c;无外乎&#xff0c;出问题的&#xff0c;也就是按照对应分分区会有常见的OOM问题。 栈 对于栈来说&#xff0c;栈的主要作用就是用于方法的执行&#xff0c;方法调用入栈、方法调出出栈。但是如果我…

LeetCode_Java_动态规划系列(1)(题目+思路+代码)

目录 斐波那契类型 746.使用最小花费爬楼梯 矩阵 120. 三角形最小路径和 斐波那契类型 746.使用最小花费爬楼梯 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。…

TS223——触摸键检测IC,具有低功耗和宽工作电压是触摸键的DC和AC特点,广泛消费性产品

TS223是触摸键检测IC&#xff0c;提供1个触摸键。触摸检测IC是为了用可变面积的键取代传统的按钮键而设计的。低功耗和宽工作电压是触摸键的DC和AC特点。 TS223采用SSOP16、SOT-23-6的封 装形式封装。 主要特点&#xff1a; ● 工作电压2.0V~5.5V ● 工作电流VDD3V&#xff0…

C++数据库连接池

功能实现设计 &#xff1a; ConnectionPool.cpp 和 ConnectionPool.h &#xff1a;连接池代码实现 Connection.cpp 和 Connection.h &#xff1a;数据库操作代码、增删改查代码实现 连接池主要包含了以下功能点 &#xff1a; 1.连接池只需要一个实例&#xff0c;所以 Connec…

力扣思路题:丑数

此题的思路非常奇妙&#xff0c;可以借鉴一下 bool isUgly(int num){if(num0)return false;while(num%20)num/2;while(num%30)num/3;while(num%50)num/5;return num1; }

no main manifest attribute, in app.jar

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

安全测试自学手册之软件安全测试基础

安全测试的概念 定义&#xff1a;指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。】 应用软件的安全性测试&#xff1a;软件自身设计中存在的安全隐患&#xff0c;并检查软件对非法入侵的防御能力。系统级别的安全性测试&#xff1a;确保只有具备系统平台访问权限…

挑战杯 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE&#xff08;递归特征消除法&#xff09;4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

ARCMAP进行天空开阔度(SVF)分析

这里的SVF并不是生物学或医学的(Stromal Vascular Fraction),而是指GIS中的(Sky View Factor,SVF),即为(城市)天空开阔度。 城市天空开阔度(Sky View Factor,SVF)是重要的城市形态学参数,那今天博主就跟大家讲一下如何用ArcMap来计算天空开阔度。 1、加载数据 需要加载…

【《高性能 MySQL》摘录】第 2 章 MySQL 基准测试

文章目录 2.1 为什么需要基准测试2.2 基准测试的策略2.2.1 测试何种指标 2.3 基准测试方法2.3.1 设计和规划基准测试2.3.2 基准测试应该运行多长时间2.3.3 获取系统性能和状态2.3.4 获得准确的测试结果2.3.5 运行基准测试并分析结果2.3.6 绘图的重要性 2.4 基准测试工具…

[ffmpeg] x264 配置参数解析

背景 创建 x264 编码器后&#xff0c;其有一组默认的编码器配置参数&#xff0c;也可以根据需要修改参数&#xff0c;来满足编码要求。 具体参数 可修改的参数&#xff0c;比较多&#xff0c;这边只列举一些常用的。 获取可以配置的参数 方式1 查看 ffmpeg源码 libx264.c…