首页 > 其他分享 >斜率优化DP 学习笔记

斜率优化DP 学习笔记

时间:2023-09-03 18:04:18浏览次数:54  
标签:text 笔记 times 斜率 DP 看做 单调

斜率优化 DP

适用情况

适用于求解最优解(最大、最小)问题。

上凸壳与下凸壳

求解步骤

  1. 对于任意状态转义方程,设 $A_i$,$B_i$,使状态转移方程转化为

    • $f_i = \min(f_j + (A_i - B_j) ^ 2)$
  2. 当 $i$ 使从 $j$ 转移来时,丢掉 $\min$

    • $f_i = f_j + {A_i} ^ 2 + {B_j} ^ 2 - 2 \times A_i \times B_j$
  3. 将仅和 $j$ 有关的放在左边,其他的放在右边

    • $f_j + {B_j} ^ 2 = 2 \times A_i \times B_j + f_i - {A_i} ^ 2$
  4. 仅和 $j$ 有关的,是已经求出来的,看做 $y$;仅和 $i$ 有关的,再附加上常数,是需要求的,看做纵截距;剩下的与 $i$ 和 $j$ 都有关,将其中仅与 $j$ 有关的因式看做 $x$,剩余的因式看做斜率

    • $y = f_j + {B_j} ^ 2$
    • $k = 2 \times A_i$
    • $x = B_j$
    • $b = f_i - {A_i} ^ 2$
  5. 当 $x$ 单调递增时:

    • 若 $k$ 单调递增或递减,可以使用单调栈维护
    • 若 $k$ 无单调性,可以在数组内二分斜率,找到与目标相切的点
  6. 已知两个点 $\text{A}(x_1, y_1)$,$\text{B}(x_2, y_2)$,则直线 $\text{AB}$ 斜率为 $\dfrac{y_1 - y_2}{x_1 - x_2}$

  • 小问题:当 $x$ 非单调递增呢?我还没学QwQ

题单

可以参考这个:https://www.luogu.com.cn/training/5352

标签:text,笔记,times,斜率,DP,看做,单调
From: https://www.cnblogs.com/RainPPR/p/slope-dp.html

相关文章

  • 【学习笔记】树套树
    所谓树套树,其本质是通过用树维护一组树的根,从而维护强悍的数据1线段树套平衡树线段树套#include<bits/stdc++.h>usingnamespacestd;#defineMAXN50005intseg[MAXN<<2];intamin=1000000,amax=0;structNode{ intval,rnd,siz; intch[2]; }t[MAXN*80];intt......
  • 安装dpvs
    #安装依赖yuminstallpopt-develautomakegcc-yyuminstall-ypython3-pipyuminstallnumactl-devel-yyuminstallopenssl-devel-y#安装python3.7.0和meson以及ninjatar-xvfPython-3.7.0.tar.xzcdPython-3.7.0./configure--prefix=/usr/local/python3./c......
  • vivado 教程笔记 -创建工程 - 编译 - 布局布线 - 生成bit - 下板验证
    1、创建工程工程就算创建完了。2、 创建源文件双击打开后,就可以敲入代码 3、语法编译、布局布线、IO配置约束输入完一个完整代码后,先对语法进行综合分析,可直接跳过RTLANALYSIS,直接点击SYNTHESIS(综合)进行布局布线布局布线完后,IO管脚配置约束有时......
  • DPDK基本原理
    内核处理网络数据包弊端中断处理处理大量网络数据包时,出现频繁的硬件中断,产生较高的性能开销。内存拷贝网络数据包从网卡到应用程序流程是,数据从网卡通过DMA传到内核缓冲区,从内核态拷贝到用户态。上下文切换硬件中断、多线程、锁竞争产生上下文切换开销。CPU缓存失效数据包处......
  • 学习笔记-计算机病毒对抗技术-病毒概述
    本周我们学习下计算机病毒揭秘与对抗技术。主要分为6大模块计算机病毒概念定义计算机病毒(ComputerVirus)指编制者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机正常使用并且能够自我复制的一组计算机指令或程序代码。特点1、破坏性2、隐蔽性3、潜伏性4、传染性5、不可......
  • 网络流学习笔记
    开个坑,是个大工程,一篇可能放不下,所以后续存在形式未知。每周日写一个小时,大概会写很久,目前处于一个咕咕的状态。笔者是主要从Alex_wei的博客中学习网络流,因此本文有很多东西来自wls的博客,wlstql。1.一些有关概念网络是一张有向图\(G=(V,E)\),每条边\((u,v)\)具有流量......
  • KDT学习笔记
    这次稍微水了点。todo:复杂度。不知道是否存在的二进制分组优化。偏序问题一般是CDQ,常数小;或者可持久化,拿来做区间问题;万能的树套树,就是吃空间。然后就是KDT,多位偏序无脑叠,空间线性,时间……玄学。有时也有更好的方法,比如用std::bitset优化偏序,不过量有限,而且我不会。......
  • *【学习笔记】(21) Prufer 序列
    Prufer序列Prufer序列可以将一个带标号\(n\)个节点的树用\([1,n]\)中的\(n-2\)个整数表示,即\(n\)个点的完全图的生成树与长度为\(n-2\)值域为\([1,n]\)的数列构成的双射。Prufer序列可以方便的解决一类树相关的计数问题,比如凯莱定理:\(n\)个点的完全图的生成树有......
  • 《C++并发编程实战》读书笔记(2):线程间共享数据
    1、使用互斥量在C++中,我们通过构造std::mutex的实例来创建互斥量,调用成员函数lock()对其加锁,调用unlock()解锁。但通常更推荐的做法是使用标准库提供的类模板std::lock_guard<>,它针对互斥量实现了RAII手法:在构造时给互斥量加锁,析构时解锁。两个类都在头文件<mutex>里声明。std::......
  • celery笔记
    celery介绍1.它是什么?分布式的异步任务框架直译为:芹菜[/ˈseləri]2.可以做什么?异步任务。(异步执行函数)延迟任务。(延迟5s任务(函数))定时任务。(例如:每天23点触发测试)[如果单纯执行定时任务,没必要用celery]3.平台问题celeryisaprojectwithminimal......