0 参考资料

1 斜率优化

1.1 斜率优化简介

如果一类最优化问题的 dp 式可以被表示为 \(f_i = \min / \max \{f_j + cosx_i + cosy_j + F_iF_j\}\),则它一般可以被斜率优化直接优化。

这里我们就以最小值为例。

1.2 决策点策略

假设我们要计算 \(f_p\)。

我们考虑计算当决策点 \(i < j\) 时,\(i\) 比 \(j\) 优秀的条件。

\[f_i + cosx_p + cosy_i + F_iF_p < f_j + cosx_p + cosy_j + F_jF_p
\]

将式子进行化简,得:

\[f_i - f_j < cosy_j - cosy_i + (F_j - F_i) \times F_p
\]

继续化简:

\[(cosy_j + f_j) - (cosy_i + f_i) + (F_j - F_i) \times F_p > 0
\]

这时,我们设 \(x_i = cosy_i + f_i\),则:

\[(F_j - F_i) \times F_p > x_i - x_j
\]

把式子整理得好看一点:

\[\operatorname{slope}(i, j) = \frac{x_i - x_j}{F_i - F_j} > F_p
\]

后面的式子是一个斜率的形式,所以我们把他称之为 斜率优化

1.3 维护决策点

\(x_i\) 和 \(F_i\) 都有序。

于是有两个结论。

结论 1:若当前 \(i\) 比 \(j\) 优,则之后 \(i\) 一定也比 \(j\) 优。

结论 2:相邻决策之间的斜率单调增。

证明较为简单。

可以直接维护单调队列。

\(x_i\) 有序。

结论 1 不存在了,但是还有结论 2!

需要在凸壳上二分。

\(F_i\) 有序。

需要使用平衡树等维护凸壳。

其他情况。

需要 动态凸壳 / 李超线段树。

1.4 斜率优化总结

斜率优化

1.5 经典题目

I. P3195 [HNOI2008]玩具装箱

DP 优化 学习笔记的更多相关文章

  1. DP动态规划学习笔记——高级篇上

    说了要肝的怎么能咕咕咕呢? 不了解DP或者想从基础开始学习DP的请移步上一篇博客:DP动态规划学习笔记 这一篇博客我们将分为上中下三篇(这样就不用咕咕咕了...),上篇是较难一些树形DP,中篇则是数位 ...

  2. KVM性能优化学习笔记

    本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6. ...

  3. 深挖计算机基础:Linux性能优化学习笔记

    参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记: ...

  4. Pandas 性能优化 学习笔记

    摘要 本文介绍了使用 Pandas 进行数据挖掘时常用的加速技巧. 实验环境 import numpy as np import pandas as pd print(np.__version__) ...

  5. 清北学堂2018DP&图论精讲班 DP部分学习笔记

    Day 1 上午 讲的挺基础的--不过还是有些地方不太明白 例1 给定一个数n,求将n划分成若干个正整数的方案数. 例2 数字三角形 例7 最长不下降子序列 以上太过于基础,不做深入讨论 例3 给定一 ...

  6. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

  7. DP斜率优化学习笔记

    斜率优化 首先,可以进行斜率优化的DP方程式一般式为$dp[i]=\max_{j=1}^{i-1}/\min_{j=1}^{i-1}\{a(i)*x(j)+b(i)*y(j)\}$ 其中$a(j)$和 ...

  8. hdu3507 斜率优化学习笔记(斜率优化+dp)

    QWQ菜的真实. 首先来看这个题. 很显然能得到一个朴素的\(dp\)柿子 \[dp[i]=max(dp[i],dp[j]+(sum[i]-sum[j])^2) \] 但是因为\(n\le 50000 ...

  9. DP动态规划学习笔记

    作为考察范围最广,考察次数最多的算法,当然要开一篇博客来复习啦. 子曰:温故而知新,可以为师矣 我复习DP时有一些自己对DP的理解,也就分享出来吧. ——正片开始—— 动态规划算法,即Dynamic ...

  10. mysql性能优化学习笔记(2)如何发现有问题的sql

    一.使用mysql慢查询日志对有效率问题的sql进行监控      1)开启慢查询       show variables like ‘slow_query_log’;//查看是否开启慢查询日志   ...

随机推荐

  1. 双向 和 多重 RNN

    前面已经对 RNN (递归神经网络) 的变体 (主要为解决 梯度消失和梯度爆炸) 接触了两个比较流行的 LSTM 和 GRU, 其核心思想呢, 是通过其所谓 **"gate" ** ...

  2. 由 Array.includes 函数引发对引用数据类型的思考

    `` 数组的includes方法在日常的编程中比较常用到,其作用就是判断某一数据是否在数组中,通常来说,数组中的数据如果是数字,布尔值,或者字符串的话,都是能够进行判断的 例如: [1,2,3,4]. ...

  3. SpringBoot3整合SpringSecurity6(五)自定义登陆页面

    大家好,我是晓凡 写在前面 在前面的文章中,我们学习了SpringSecurity 登录认证流程,对其应该有个大概印象了. 忘记的小伙伴点击下面自己复习去~ 在前面的学习中,我们使用的都是Spring ...

  4. flutter3-winseek客户端AI实例|Flutter3.32+DeepSeek流式ai对话模板Exe

    原创首发flutter3+deepseek+window_manager客户端Ai流式打字Flutter-WinSeek. flutter3-winseek-chat:基于flutter3.32+da ...

  5. Flask之初始

    一.简介 Flask是一个基于Python实现的Web开发'微'框架 官方文档: http://flask.pocoo.org/docs/0.12/中文文档: http://docs.jinkan.o ...

  6. vue的a-tree-select选择父节点回显的是子节点

    正常来说当选择父节点时候,我们回显的应该就是父节点的信息比如:  可是现在我想回显子节点的信息如何处理? 很简单:在 a-tree-select组件里面去掉这一句:  这样回显的就是我们想要的结果了 ...

  7. 网络编程TCP UDP

    网络编程 (1)什么是网络编程 网络编程是指通过编程语言在计算机之间建立通信的一种方式. 它是在互联网上进行数据传输的关键组成部分,使计算机能够相互通信.交换信息和共享资源. 网络编程涉及许多不同的技 ...

  8. 3-6softmax回归从0开始实现

    3-6softmax回归从0开始实现 import torch from IPython import display from d2l import torch as d2l batch_size ...

  9. HyperWorks的模型简化

    2.2 模型简化 本节将介绍如何改变结构的外形以实现模型的简化.模型中对分析不需要的小特征,如小孔.导角等,将被去除.模型简化后将大大提高整体模型的网格质量.建模效率以及后续模型求解效率. 本节将学习 ...

  10. 《Building REST APIs with Flask》读后感

    一. 为什么读这本书? 之所以选择这本书其实是因为最近自己在梳理 JWT 的用法.自己曾参与过的一个项目虽然使用的是 Flask 开发,但是授权使用的 PyJWT,当时以为使用 PyJWT 是行业通用 ...