首页 > 其他分享 >决策单调性 dp

决策单调性 dp

时间:2024-11-11 22:30:55浏览次数:3  
标签:le .. 矩阵 决策 dp 单调

重修!

upd on 09/14/24:狗屁模拟赛督促我来更新这篇博。


以下讨论最小化问题。

对于 \(n\times n\) 的矩阵,有:

  • 子矩阵 \(A_{[i_1,i_2,..,i_k][j_1,j_2,..,j_\ell]}\) 为矩阵 \(A\) 取出 \(i_1,i_2,..,i_k\) 行和 \(j_1,j_2,..,j_\ell\) 组成的矩阵。其中当序列 \(i,j\) 元素连续时为连续子矩阵
  • 行最小值位置 \(\min_i(A)\) 为最大的整数 \(k\) 满足 \(A_{i,k}=\min\limits_{1\le j\le m}A_{i,j}\)。
  • 若 \(\forall 1\le i<j\le n,\min_i(A)\le \min_j(A)\),则 \(A\) 为单调矩阵
  • 若对于 \(A\) 的所有子矩阵 \(A'\),都满足 \(\forall 1\le i<j\le n,\min_i(A')\le \min_j(A')\),则 \(A\) 为完全单调矩阵

容易发现,转移矩阵为单调矩阵时 dp 满足决策单调性。

  • 若 \(\forall1\le i_1<i_2\le n,1\le j_1<j_2\le n\),都有 \(A_{i_1,j_1}+A_{i_2,j_2}\le A_{i_1,j_2}+A_{i_2,j_1}\),则 \(A\) 为蒙日矩阵,其中蒙日矩阵为完全单调矩阵
  • 若 \(A\) 满足四边形不等式,则有 \(\forall1\le i<n,1\le j<n\),都有 \(A_{i,j}+A_{i+1,j+1}\le A_{i,j+1}+A_{i+1,j}\)。

满足四边形不等式的矩阵都是蒙日矩阵,因为上面定义中的限制等于 \(A\) 的二维差分矩阵 \(\Delta A\) 元素 \(\ge 0\),所以只要针对单独元素的判断就是充要的。

常见的蒙日矩阵有:

  • 根据四边形不等式,\(\Delta A_{x,y}\ge 0\)。
  • \(A_{x,y}=|x-y|^p,p\ge 1\)。
  • \(A_{x,y}=f(x,y)\),其中 \(f(x)\) 下凸。

离线决策单调性

分治

令 \(solve(l,r,L,R)\) 表示在处理 \(f_{l,..,r}\) 的决策,取值为 \([L,R]\),每次取出 \(mid\),找到决策点并继续递归。单次分治复杂度为 \(\mathcal O(n\log N)\),其中 \(N\) 为决策点值域。

\(^\dagger\):当 \(A_{x,y}\) 无法快速计算,但是能快速由 \(A_{x,y}\) 推到 \(A_{x+1,y}\) 和 \(A_{x, y+1}\),在分治中类似莫队的移动指针复杂度也是正确的,因为每层最多移动 \(\mathcal O(N)\) 次。

路径交错原理

发现对于 2D dp 的 \(m\) 个转移矩阵 \(A_1,A_2,\cdots,A_m\),如果满足决策单调性,则有 \(\min_j(A_{i-1})\le \min_j(A_i)\le \min_{j+1}(A_i)\),此时我们每层倒着 dp,决策点枚举总时间复杂度为 \(\mathcal O(n^2)\) 的。

在线决策单调性

二分队列

记录三元组 \((x,l,r)\),表示决策 \(x\) 目前对 \(f_{l,..,r}\) 有贡献。每次加入先把没用的弹掉,然后二分 \([l,r]\) 中从 \(x\) 更优变成 \(i\) 更优的转折点,改一下加进去。

\(^\dagger\)二分栈

\(^\dagger\):这不算决策单调性,但是与二分队列处理方式类似,便一起记录。

如果对于决策 \(1\le i<j\le n\),存在分界点 \(p_{i,j}\),使得在 \([j,p]\) 决策 \(j\) 更优,而 \((p,n]\) 决策 \(i\) 更优,则可以用二分栈优化。

维护当前 \(f_i\) 决策的栈,对于栈顶和次栈顶两个元素 \(t_1,t_2\),若有 \(p_{t_1,t_2}<p_{t2,i}\),说明 \(t_2\) 是冗余的,全部扔掉。最后把栈顶 $p_{t_1,t_2}\le i $ 的也扔掉,转移,把决策 \(i\) 扔进去。


剩下一些理论的东西有空再更吧。

https://www.cnblogs.com/AFewSuns/p/quadrangle-inequality.html

标签:le,..,矩阵,决策,dp,单调
From: https://www.cnblogs.com/notears/p/18540724

相关文章

  • 线程进阶篇4:如何用Executors工具类创建线程池-代码演示-源码分析-可行性分析,对比new T
        本篇文章主要是讲解如何使用Executors工具类创建线程池,看本篇之前建议同学们先去看看我发布的上一篇文章,即用newThreadPoolExecutor()来创建线程池,里面讲解了线程池的参数使用方法和场景,熟悉了之后再来学习这一篇会更容易理解一些!因为Executors只是一个工具类,底层......
  • 郝玩的数据结构1——单调栈,单调队列
    栈和队列是很郝咏的Stl,那么,我们手搓——用数组模拟故事背景:辣鸡老o在学单调栈&单调队列——我栈top为栈顶,易得出出栈即top--,入栈++top=(ovo)......——完全不会讲,那么上马:点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=114514;intstk[N],top=0;......
  • 倍增$dp$
    倍增\(dp\),其实就是\(dp\)有一维为走多少步,这个东西很大,没法硬枚举,恰好要求的是最值/路径和之类的东西,可将走多少步这一维\(i\)变为走\(2^i\)。注:\(long\long\)用位运算不能用\(1<<i\),要用\(1LL<<i\)(例1,例2)倍增可用于维护树上某链最值/路径和,可用来加速dp同时,树上dp不一定由......
  • DP 技巧总结
    DP技巧总结进行了为期接近一周的DP特训,做了很多同学找的高质量题目,也学到了很多技巧。现在来把一些感觉比较有价值的技巧进行一些统一的总结。插入型DP这个东西之前应该在选拔期间的一场周测中见过,但是隔了很久,已经有所遗忘。这次题单里出现了两道类似的题目,我都不会做。其......
  • 单调栈基础模板
    #include<bits/stdc++.h>usingnamespacestd;constintN=1000005;intn,ansl[N],ansr[N],a[N];intf[N],r,x;intmain(){cin>>n;for(inti=0;i<n;i++)cin>>a[i],ansl[i]=ansr[i]=-1;for(inti=0;i<n;i++){......
  • ABC372D ABC379F 题解 单调栈二分
    ABC372DABC379F题解单调栈二分一直觉得AT上面学到的东西比CF要多一些,无意捧一踩一,但可能是我太菜的原因,毕竟ABC的题目普遍要比Div.2简单一些。好多次碰到这个单调栈里面二分的trick了,所以写一篇来总结一下。ABC372D形象地给定一系列Buildings的高度\(h\),保证每个......
  • MDPI之Applied Science word 模板下载
    因为之前找过很多资料,都没有word模板下载的教程,所以在这里留个记号。官网点此一、进入如下页面 二、下拉找到Submissionchecklist在这里有 MicrosoftWord模板和 LaTeX模板(在此处单击或去官网点击即可自行下载)。......
  • 基于surging 的木舟平台如何通过Tcp或者UDP网络组件接入设备
    一、概述     上篇文章介绍了木舟通过HTTP网络组件接入设备,那么此篇文章将介绍如何利用Tcp或者UDP网络组件接入设备.     木舟(Kayak)是什么?      木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的,平台包含了微服务和物联网平台。支......
  • 每周算法2:数学+模拟+哈希表+栈+线性dp+贪心(简单)
    目录1.统计数字描述输入描述:输出描述: 题解2.两个数组的交集(哈希表)描述题解 3.点击消除(栈)描述输入描述:输出描述: 题解4.牛牛的快递(模拟+补充)描述输入描述:输出描述:题解 5.最小花费爬楼梯(简单线性dp)描述输入描述:输出描述:示例1题解6.数组中两......
  • 单调队列笔记
    单调队列笔记双端队列deque维护一个严格单调变化的组,可以称为一个单调队列单调队列因为可以直接对组的两端进行操作,所以可以有效的降低时间复杂度用单调队列来解决问题,一般是需要得到的某个范围内的最小值或最大值这里以一道经典的单调队列的题目为例:题目描述有一个长为\(......