基于 dp 凸性的优化策略(待修缮)

news/2024/11/15 4:09:40/文章来源:https://www.cnblogs.com/notears/p/18540734

斜率优化

\(y=kx+b\) 形式维护队列,询问不单调则二分决策点。

Slope Trick

如果决策函数满足以下条件:

  • 连续
  • 凸包,每一段斜率为整数
  • 凸包上断点之间的一次函数斜率总和为 \(\mathcal O(n)\) 级别

则称这个函数满足性质 \(T\),且如果 \(f,h\) 都满足性质 \(T\),则 \(f+h\) 也满足性质 \(T\)

于是对于这种函数,维护凸包开头一次函数的 \(k,b\) 和后面斜率转折点,其中斜率在转折点增加多少就插入几个转折点。

于是我们可以快速维护这个决策函数:

  • \(f'=f+g\):将两函数的转折点集合合并。
  • \(f'(x)=\min\limits_{t\le x}/\max\limits_{t\le x} f_t\):令 \(k=0\) 时左右两边断点为 \(\ell,r\),维护 \(\le \ell\)\(r\le\) 的断点集合 \(\mathcal L,\mathcal R\),两个操作分别对应去掉一个集合。
  • \(f'(x)=f(x+t)\):打标记,实现平移。

习题

  • CF713C
    • 严格递增转不减之后,可写出转移方程 \(f(i,j)=\min\limits_{k\le i} f(k,j-1)+|a_i-j|\),随便维护。
  • ABC217H
    • 首先此题有明显的定义域,初始为 \([0,0]\),于是将 \((0,0)\) 两边的斜率设为 \(>n\),可以保证不会影响到答案。
    • 其次有 \(f'(i)=\min\limits_{|i-j|\le 1} f(j)\) 的操作,等价于 \(\mathcal L\) 左平移 \(1\) 单位,\(\mathcal R\) 右平移 \(1\) 单位,打个标记即可实现。
    • 其余两个操作相当于加类似 \__/ 的函数,讨论一下与 \(\ell, r\) 的关系并处理断点应放入的集合就好。
  • ARC070C
    • 与上一题很类似,只不过加的是绝对值函数,其实更好处理了。
  • P3642
    • 首先考虑将每个节点的函数值包含其父边,方便处理。
    • 然后令父边权值为 \(w\),这个函数转移类似于 \(f'(x)=\min\limits_{0\le t}f(x-t)+|w-t|\),定义域的限制使转移比较复杂,根据分讨之后发现凸函数的变化如下所示:
    • 本质就是先保留 \(\mathcal R\) 的一个元素,之后并将 \(\ell,r\)\(w\),使用左偏树即可。

wqs 二分

咕一会儿。

https://www.luogu.com/article/pf2lj18t

闵可夫斯基和

https://www.cnblogs.com/apjifengc/p/17041194.html

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

warmup_csaw_2016

题目链接:warmup_csaw_2016。 下载附件后,使用 IDA 反编译,定位到 main 函数,如下。 __int64 __fastcall main(int a1, char **a2, char **a3) {char s[64]; // [rsp+0h] [rbp-80h] BYREFchar v5[64]; // [rsp+40h] [rbp-40h] BYREFwrite(1, "-Warm Up-\n", 0xAu…

System

System 类常见的成员方法:图1System 是一个工具类, 提供了一些与系统相关的方法. public static void exit(int status) // 终止当前运行的 Java 虚拟机status 是一个状态码, 有两种情况, 第一种情况是等于 0, 表示当前虚拟机是正常停止的. 第二种情况是非零, 一般是写 1, 表示…

Java中的 Exception 和 Error 有什么区别

Java中的 Exception 和 Error 有什么区别Exception 和 Error 都是 Throwable 类的子类(在Java代码中只有继承了 Throwable 类的实例才可以被 throw 或者被 catch)它们表示在程序运行时发生的异常或错误情况。 总结来看: Exception 表示可以被处理的程序异常,Error 表示系统…

数据采集与融合技术实验课程作业三

数据采集与融合技术实验课程作业三作业所属课程 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology作业链接 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology/homework/13287gitee码云代码位置 https://gitee.com/wang-qi…

HTTPS ppt素材

本来的主题是介绍一下我之前做的搜索与推荐的业务,但9月份开始我主要开始承担一些医那块的业务测试,就想做点别的分享,但换成医的业务介绍,想了想我目前对医的了解程度,实在没勇气拿出来分享,所以就换了这个主题。 这个主题其实也是早有预谋,一个初衷是想对某一个通用性…

jvm 堆内存

堆、方法区、直接内存,多个线程之间是共享的。 ------------ 堆内存是会溢出的。 堆内存默认最大是7G

CdnCheck工具

前言:CdnCheck工具实现,记录下我这边实现的几个点 参考文章:https://github.com/projectdiscovery/cdncheck 参考文章:https://github.com/YouChenJun/CheckCdn 参考文章:https://github.com/zu1k/nali 参考文章:https://github.com/u9sky/cdn-cname-domain/blob/main/cd…

考研打卡(14)

开局(14) 开始时间 2024-11-11 20:21:43 结束时间 2024-11-11 22:00:55今天考研数学的资料到了数据结构设一组初始记录关键字序列为(50,40,95,20,15,70,60,45), 则以增量d=4的一趟希尔排序结束后前4条记录关键字为_____(中国地质大学2017年) A 40,50,20,95 B 15,40,6…

说明与笔记导航(咕咕咕)

对使用这些笔记的同学想说的话,以及更新进度。为什么写这么多B东西? 其一呢是帮助我自己,边写笔记边梳理知识;其二呢是帮助各位义父义母考试成功。 更新进度与内容说明 11.11:本周工作日需突击学习python,有限体积N-S方程推导已写完。 目前进度:3009 建模:数值方法写完…

运用Windows API进行编程

目录运用Windows API进行编程实验环境窗口创建基本流程基本代码流程1、头文件和库2、全局变量和函数3、入口主函数4、注册窗口类函数5、创建和显示窗口函数6、窗口过程函数运行结果实验小结 运用Windows API进行编程 运行Windows应用程序在桌面显示Windows窗口。窗口内背景色为…

Windows API窗口绘图程序设计

目录Windows API窗口绘图程序设计1、窗口过程函数2、WM_LBUTTONDOWN:处理鼠标左键按下的消息鼠标消息相关知识点基本鼠标消息双击消息附带信息滚轮消息附带信息:3、WM_PAINT:处理窗口重绘的消息窗口绘图相关知识点窗口绘图基本流程开始绘画绘制封闭图形(能使用画刷填充的图形…

Matlab常用的图像属性

线型、标记和颜色 线型、标记和颜色,指定为包含符号的字符串或字符向量。符号可以按任意顺序显示。不需要同时指定所有三个特征(线型、标记和颜色)。例如,如果忽略线型,只指定标记,则绘图只显示标记,不显示线条。以下是 MATLAB 在许多类型的绘图中使用的默认颜色的 RGB …