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

队列优化dp || 线段树优化dp

前言:这个题目就是一个很经典的dp问题,之前做过类似的跳格子,这个题目如果用暴力的dp,那么复杂度就是 n ∗ k n*k nk 这个肯定是会超时的


题目链接

在这里插入图片描述

class Solution:def maxResult(self, nums: List[int], k: int) -> int:# 这个不就是一个dp,但是怎么能降低复杂度呢n = len(nums)dp = [-inf]*(n)dp[0] = nums[0]for i in range(n):for j in range(i+1,min(i+k+1,n)):dp[j] = max(dp[j],dp[i]+nums[j])# print(i,dp[i])return dp[-1]

如果我们用线段树来优化查询的话

class Tree:def __init__(self,n):self.t = [-inf]*(4*n)def update(self,o,l,r,index,va):if l==r:self.t[o] = vareturnmid = (l+r)//2if mid>=index:self.update(o*2,l,mid,index,va)else:self.update(o*2+1,mid+1,r,index,va)self.t[o] = max(self.t[o*2],self.t[o*2+1])def query(self,o,l,r,L,R):if L<=l and r<=R:return self.t[o]tmp = -infmid = (l+r)//2if mid>=L:tmp = max(tmp,self.query(o*2,l,mid,L,R))if mid<R:tmp = max(tmp,self.query(o*2+1,mid+1,r,L,R))return tmpclass Solution:def maxResult(self, nums: List[int], k: int) -> int:# 这个不就是一个dp,但是怎么能降低复杂度呢n = len(nums)dp = [-inf]*(n)dp[0] = nums[0]a = Tree(n)a.update(1,0,n-1,0,dp[0])for i in range(1,n):pre = a.query(1,0,n-1,max(0,i-k),i-1)dp[i] = pre + nums[i]a.update(1,0,n-1,i,dp[i])return dp[-1]

队列优化

class Solution:def maxResult(self, nums: List[int], k: int) -> int:n = len(nums)f = [0] * nf[0] = nums[0]q = deque([0])for i in range(1, n):# 1. 出if q[0] < i - k:q.popleft()# 2. 转移f[i] = f[q[0]] + nums[i]# 3. 入while q and f[i] >= f[q[-1]]:q.pop()q.append(i)return f[-1]

这个有点难以理解
在这里插入图片描述


文章转载自:
http://apophysis.gbfuy28.cn
http://banking.gbfuy28.cn
http://arabis.gbfuy28.cn
http://absinth.gbfuy28.cn
http://barrelhead.gbfuy28.cn
http://astronaut.gbfuy28.cn
http://calliper.gbfuy28.cn
http://choreodrama.gbfuy28.cn
http://bowered.gbfuy28.cn
http://acetarious.gbfuy28.cn
http://bivalence.gbfuy28.cn
http://auctorial.gbfuy28.cn
http://brutal.gbfuy28.cn
http://bragger.gbfuy28.cn
http://canning.gbfuy28.cn
http://carphology.gbfuy28.cn
http://adaption.gbfuy28.cn
http://biogeny.gbfuy28.cn
http://begorra.gbfuy28.cn
http://cadaver.gbfuy28.cn
http://casserole.gbfuy28.cn
http://amniocentesis.gbfuy28.cn
http://agronomy.gbfuy28.cn
http://antifertilizin.gbfuy28.cn
http://boulle.gbfuy28.cn
http://cheiromancy.gbfuy28.cn
http://antihero.gbfuy28.cn
http://candy.gbfuy28.cn
http://capsulize.gbfuy28.cn
http://acrocentric.gbfuy28.cn
http://www.dtcms.com/a/164422.html

相关文章:

  • 探索豆包WEB/PC超能创意1.0:创意新利器的全面解析
  • 【力扣/代码随想录】哈希表
  • DTO,VO,PO,Entity
  • shell(4)
  • Linux环境变量的作用以及进程的虚拟地址原理
  • 关于php-fpm的调优和配置
  • [官方 IP] XPM_CDC
  • Origin绘图——多标签散点图优化(蜂群图)
  • C#里创建一个TCP客户端连接类
  • FastGPT部署的一些问题整理
  • 第一个机器人程序
  • 大厂Java面试深度解析:Dubbo服务治理、WebSocket实时通信、RESTEasy自定义注解与C3P0连接池配置实践
  • 【AI面试准备】语言模型、语音、多模态等模型能力评估指标和能力边界
  • 制作一款打飞机游戏31:敌人数据库
  • MIT6.S081 - Lab11 networking(网络栈)
  • MyBatis 使用 POJO 参数动态查询教程
  • 从零搭建体育比分网站:技术选型与API调用实战(附完整源码)
  • 解锁植被参数反演密码:AI 与 Python 的融合之道
  • Andorid车机UI适配,AndroidUI图px的单位,如何适配1920x720,PPI100的屏幕设备
  • X11VNC远程屏幕连接了解一下
  • 免费Grok API Key获取,Grok API使用指南
  • [特殊字符]OCR,给交通领域开了“外挂”?
  • 【保姆级教程-Centos7环境下部署Prometheus并设置开机自启】
  • k8s术语master,node,namepace,LABLE
  • 堆栈和队列模拟
  • foc控制 - clarke变换和park变换
  • [TxRxResult] There is no status packet! 及 Incorrect status packet! 问题修复
  • Nacos源码—2.Nacos服务注册发现分析四
  • Openharmony4.1 Release——软总线部分错误码表
  • 数据库概论速成期中版