首页 > 其他分享 >线性动态规划

线性动态规划

时间:2024-05-26 10:33:01浏览次数:8  
标签:状态 cnt ... max 序列 线性 动态 规划 转移

《算法设计与分析》期末复习

导弹拦截

https://www.luogu.com.cn/problem/P1020

定义状态 \(f(i)\) 为 \(1 ~ i\) 区间内的最大导弹拦截数量

有状态转移

\[f(j) = max { f(i) } + (a[j] <= a[i]) \]

直接赤裸裸的做状态转移,时间复杂度预计在 \(O(n^2)\),空间复杂度在 \(O(n)\)

考虑对于一组序列 $ { a_1, a_2, ..., a_n} $

维护的状态数组中提取出的最长不下降子序列为 $ {1, 1, ..., 2, ..., k} $

实际上对于状态数组中最后一段连续的值相同的序列,选择这段序列中任何一个对应的导弹作为结尾(也就是最后一个打下来的导弹)都合法,但是选择最高的那个必然是最优的

那么可以定义 $ cnt(1 ... num) $ 记录我们的答案,显而易见的是 $ cnt $ 具备一个不怎么严格的单调性

那么对于下标 $ j $,如果 $ a(j) <= a(cnt(num)) $,则 $ f(j) = f(cnt(num)) + 1, cnt(num + 1) = a(j)$

否则二分查找最大的元素 \(a(cnt(k))\) 满足 $ a(cnt(k)) <= a(j) $,把 $ cnt(k) $ 替换为 $ j $

第二问涉及到 Dilworth 定理在偏序集上的证明

打鼹鼠

https://www.luogu.com.cn/problem/P2285

容易证明,起点必然在某一个鼹鼠的出生位

容易想到以下状态转移

\[f(i, j, k) = max { f(i + dx, j + dy, k - 1) } + (a(i, j) == k) \]

空间上太复杂,算法实现上也不做人,必然涉及到记忆化搜索,考虑简化状态转移

实际上,对于题目的需求,坐标本身描述空间的属性意义不大,仅仅规定了从一个状态到另一个状态之间转移要付出的代价

完全可以将二维点抽象成按时间排列的一维的序列,两两之间的转移代价由 $ | x_i - x_j | + | y_i - y_j | $ 唯一确定

那么这题又变成了最长子序列的问题了,只不过不再是由“不下降”或者“不上升”这样的关系规定,而是由 $ | x_i - x_j | + | y_i - y_j | < k_i - k_j $ 这样的关系来规定

那么有状态转移:

\[f(i) = max { f(j) } + (| x_i - x_j | + | y_i - y_j | < k_i - k_j) \]

初始状态需要枚举起点:

\[f(k) = 1 \]

标签:状态,cnt,...,max,序列,线性,动态,规划,转移
From: https://www.cnblogs.com/sysss-blogs/p/18213380

相关文章

  • java实现一个动态监控系统,监控接口请求超时的趋势
    目录整体思路案例实现1.数据收集2.数据聚合3.趋势分析4.异常检测5.异常处理定时任务整体思路理想情况下,你可以实现一个简单的动态监控算法来检测渠道请求的响应时间趋势,并在发现频繁超时的情况下进行处理。以下是一个可能的算法框架:数据收集:首先,你需要收集......
  • 动态地控制kafka的消费速度,从而满足业务要求
    kafka是一个分布式流媒体平台,它可以处理大规模的数据流,并允许实时消费该数据流。在实际应用中,我们需要动态控制kafka消费速度,以便处理数据流的速率能够满足系统和业务的需求。本文将介绍如何在kafka中实现动态控制消费速度的方法。1.消费者配置在Kafka中,消费者可以使用以下参......
  • 有容量限制的车辆路径规划问题(Capacitated Vehicle Routing Problem)
    在看matlab的时候发现了这篇文章https://www.frontiersin.org/articles/10.3389/fict.2019.00013/full仔细阅读一下。(英语渣渣,自学用)TheCapacitatedVehicleRoutingProblem(CVRP)isanNP-optimizationproblem(NPO)thathasbeenofgreatinterestfordecadesfo......
  • 【线性回归】梯度下降
    文章目录@[toc]数据数据集实际值估计值梯度下降算法估计误差代价函数学习率参数更新`Python`实现导包数据预处理迭代过程结果可视化完整代码结果可视化线性拟合结果代价变化数据数据集(......
  • Python中动态调用C#的dll动态链接库中方法
    在Python中调用C#的dll库_哔哩哔哩_bilibili 环境准备: 安装pythonnetpipinstallpythonnet 在Python中调用C#动态链接库(DLL),可以使用pythonnet库,它允许直接使用.NET的程序集。以下是一个示例,展示如何使用pythonnet调用C#动态链接库中的方法。【pythonnet详解】—......
  • 算法学习笔记——动态规划.最长上升/下降子序列 2024.5.24
    LanqiaoOJ 773这道题是一道动态规划的题目,主要考察最长上升/下降子序列,难度中等,但是对思维的考察比较重要,特别是如何解决其第二问题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以......
  • 第17章 STL动态数组类
    1std::vector的特点vector是一个模板类,提供了动态数组的通用功能:在数组尾部插入元素时间是固定的在数组中间添加或删除元素所需时间与改元素后面的元素个数成正比存储的元素数是动态的,vector类负责管理内存vector是一种动态数组,结构体如下:2vector操作2.1实例化vector......
  • 基于条件风险价值CVaR的微网动态定价与调度策略(Matlab代码实现)
    ......
  • 面试官问:你的职业规划是什么?
    面试官在询问“你的职业规划是什么?”这个问题时,主要的目的在于了解你对未来的职业期望、目标设定以及你对于个人成长和发展的重视程度。这个问题旨在评估你是否对自己的职业道路有清晰的规划,以及你是否具备与所申请职位和公司文化相契合的职业愿景。一、回答职业规划10个建......
  • 【智能算法应用】白鲸优化算法求解二维路径规划问题
    目录1.算法原理2.路径规划数学模型3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】白鲸优化算法(BWO)原理及实现2.路径规划数学模型优化目标路径规划问题需要考虑三点:全局总路径最优避免碰撞到障碍物路径平滑性全局总路径最优考虑路径规划问题的全局最......