首页 > 其他分享 >四边形不等式学习笔记

四边形不等式学习笔记

时间:2023-04-10 15:36:03浏览次数:48  
标签:不等式 笔记 leq 满足 村庄 四边形 dp

简要题意

四边形不等式是一种 dp 优化策略。多用于 2D DP。

内容

对于区间 \([l,r]\) 带来的贡献 \(w(l,r)\),如果其满足:

对于 \(L\leq l\leq r \leq R\),\(w(L,r)+w(l,R)\leq w(L,R)+w(l,r)\)

则称 \(w\) 满足四边形不等式。特别地,如果上式符号取等,则称其满足四边形恒等式

注:上面的不等式可以记成:交叉小于包含

四边形不等式优化基础:对于一个 dp \(f(i,j)\),如果其最优决策点(即第三维枚举的最优位置) \(s(i,j)\) 满足 \({s(i,j-1)\leq s(i,j) \leq s(i+1,j)}\),则可以用此方法将时间复杂度优化到 \(O(\max i \cdot \max j)\)。

类型一

对于一类 dp(多见于把一个序列分成 \(k\) 段,最小化或最大化每一段段贡献的的和),其状态转移方程为(\(\min\) 也可以换成 \(\max\)):

\[f(i,j)=\min_{k=1}^{i-1}{(f(k,j-1)+w(k+1,j))} \]

且 \(w\) 满足四边形不等式。则:

  • \(f\) 也满足四边形不等式。
  • \(f\) 满足四边形不等式基础。

SPOJ LARMY - Lannister Army

给出一个长为 \(N\) 的序列 \(H\),你需要将其分成 \(K\) 段,使得每一段的逆序对数量之和最小。输出最小值。

\(1 \leq K \leq N \leq 5\times10^3,1 \leq H_i \leq 10^5\)

不能再板的四边形不等式吧。先推出每一个序列的每一个区间的逆序对数量,然后四边形不等式即可。

时间复杂度 \(O(N^2)\)。

P4767 [IOI2000]邮局

在数轴上分布着 \(V\) 个村庄。第 \(i\) 个村庄在 \(a_i\)。两个村庄的距离为这两个村庄的位置之差得绝对值。你需要在一些村庄中修建邮局,你需要输出每一个村庄到离其最近的邮局的距离之和的最小值。

\(1 \leq P \leq 300,1 \leq P \leq V \leq 3 \times 10^3,1 \leq a_i \leq 10^4\)

这道题可以看成将村庄排序后分成 \(P\) 段,每段在其中点修建一个邮局。最小化每段到其中点的距离和的和。

可以递推出每段的贡献 \(w(i,j)=w(i-1,j)+a_j-a_{\lfloor (i+j)\div 2\rfloor}\)。

然后,然后就没了。

时间复杂度 \(O(V^2)\)。

类型二

对于一类区间 dp 问题(多见于石子合并类),其状态转移方程为(\(\min\) 也可以换成 \(\max\)):

\[f(i,j)=\min_{k=i}^{j-1}{(f(i,k)+f(k+1,j)+w(i,j))} \]

且 \(w\) 满足四边形不等式。则:

  • \(f\) 也满足四边形不等式。
  • \(f\) 满足四边形不等式基础。

P1775 石子合并(弱化版)

有一个长度为 \(N\) 的序列 \(m\)。你可以合并相邻的两个元素 \(m_i,m_j\),变成 \(m_i+m_j\),并花费 \(m_i+m_j\) 的代价。输出最小代价和。

\(1 \leq N \leq 300,1 \leq m_i \leq 10^3\)

这道题暴力 \(O(N^3)\) 前缀和 + 区间 DP 可以过,但是容易发现 \(w(i,j)=\sum_{k=i}^{j} m_k\) 满足四边形不等式。于是可以使用四边形不等式优化。

时间复杂度 \(O(N^2)\)。

标签:不等式,笔记,leq,满足,村庄,四边形,dp
From: https://www.cnblogs.com/zheyuanxie/p/quadrangle.html

相关文章

  • 动力节点王鹤SpringBoot3笔记——第六章 远程访问@HttpExchange[SpringBoot 3]
    第六章 远程访问@HttpExchange[SpringBoot3]远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是支付最广泛的。SpringBoot3提供了新的HTTP的访问能力,通过接口简化HTTP远程访问,类似Feign功能。Spring......
  • ST入门笔记3
    ST自动控制灯模式//之前是手动的[要求]自动模式切换5s自动[配件]m1减模式不用了只需m0m2开始停止[讲解]添加定时器(条件D0=1,tc0,50)TS定时器当前值**时间继电器一定要放在if或case语句外侧,否则就会每跑一次被清零[代码](*M0启动*)IFLDP(1,M0)THEN D0:=D0+1;END_IF;(*M2stop......
  • 前端--学习笔记
    1.HTML是什么?是超文本标语语言。是一种标记语言。2.为什么要学HTML?学HTML是学什么?学HTML是为了给文档加了标记,3.加标记为了什么?为了弄样式。4.举例来讲HTML?5.所以学HTML是学什么?就是学各种加标签的方式,学做记号,为了以后找。(找是为了加样式,变得更好看) 6.HT......
  • 极光笔记 | 如何在Shopify中使用EngageLab (下)
    Sendgird发布的《2022GlobalMessagingEngagementReport》中揭示了世界各地的用户更喜欢用哪种方式与品牌互动,结论是:“电子邮件仍然是第一名(短信紧随其后)”。4800多名受访者中,有18%的人将电子邮件列为他们最常用的使用的三大渠道之一;77%的收件人每天至少刷新一次收件箱;31%的收......
  • ST入门笔记1
    ST按钮点动控制灯的应用//梯形图内嵌ST框插入(Ctrl+B)//ctrl+鼠标滚轮可以放大缩小画面//键盘调到大写//:=1;END_IF;自动缩进功能//IFM0=1THEN Y0:=1;END_IF;当M0等于1时,Y0永久置1//新建触摸屏//位点动按下为1松开为0//F4编译调试模拟//启动触摸屏模拟器启动//没有安装GX......
  • 庄懂的技术美术入门01笔记
    前言:unity的全英文对我真的是劝退XD这算是真正意义上的第一篇博客,是以笔记的形式,主要是怕自己忘了,或许之后不定时还会对笔记内容进行总结再水一篇1.一般简单的渲染过程模型——输入结构——顶点shader——输出结构——像素shader——渲染结果①模型——输入结构将原模型转化......
  • 软考笔记(9)--计算机组成原理4--总线系统
    前言总线是多个系统部件之间进行数据传输的公共通路。所谓总线就是指能为多个功能部件服务的一组公用信息线,并且能够分时地发送和接收信息。通过总线连接,计算机可在各系统部件之间实现传输地址、数据和控制信息等操作。计算机系统中存储器、CPU等功能部件之间必须互联才能组成计......
  • java并发编程(1):Java多线程-基本线程类-基础知识复习笔记
    复习资料:《同步与异步:并发/并行/进程/线程/多cpu/多核/超线程/管程 》基本线程类基本线程类基本线程类指的是Thread类,Runnable接口,Callable接口继承Thread创建线程继承java.lang.Thread类创建线程是最简单的一种方法,也最直接。publicclassMyThread1extendsThread{}种......
  • verilog基本语法学习笔记
    input和outputmodule/endmodule:表征模块的开始与结束。example:模块名可由用户指定,可包含字母、数字及下划线,需以字母开头,区分大小写assign:赋值操作关键字,该关键字后可跟一个赋值表达式,该关键字是实现组合逻辑操作的一种主要描述方式。input/output:表征该信号的方向,除输入、......
  • 【学习笔记】go协程和通道
    虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否有一种机制:使用者分配足够多的任务,系统能自动帮助使用者把任务分配到CPU上,让这些任务尽量并发运作。这种机制在Go语言中被称为goroutine。go......