首页 > 其他分享 >动态动态规划

动态动态规划

时间:2023-09-08 13:12:22浏览次数:38  
标签:begin end max vmatrix inf 动态 规划 dp

前置知识

树剖

传送门

广义矩乘

考虑矩乘大概是一个 \(\sum a\times b\) 的形式,那么考虑把它换成其他东西比如 \(\prod a\&b\) 或者 \(\max a+b\),其实发现它们都可以用矩乘的理论优化,从另一个角度上讲 floyd 也是矩乘。

定义

数据结构维护带修改的 dp,最常用的大概是线段树。

当然能维护的东西当然只有矩阵了,所以还是做不到太灵活。

模板

小白逛公园为例,之前学过直接维护最大子段和的线段树方法,但是其实也可以当成一道 dp 来做。

不妨假设没有修改,询问是全局的最大子段和,那么就是一个简单的 dp 问题:\(f_i\) 表示以第 \(i\) 个元素结尾的最大子段和,有 \(f_i=\max(f_{i-1},a_i)\)。

考虑 \(g_i\) 表示 \(\max\limits_{j\le i}f_j\) 则有 \(ans=g_n,g_i=\max(g_{i-1},f_i)\)。

然而我们的目标是让它支持区间查询,所以考虑搬到矩阵上:\(g_i=\max(g_{i-1},f_{i-1},a_i)\)。

则可以列出一个矩阵:

\[\begin{vmatrix}f_{i-1}&g_{i-1}&0\end{vmatrix}\times\begin{vmatrix}a_i&a_i&-\inf\\-\inf&0&-\inf\\a_i&a_i&0\end{vmatrix}=\begin{vmatrix}f_i&g_i&0\end{vmatrix} \]

然后就可以随便维护了。

例题

树上最大权独立集

传送门

考虑先写出 dp 式子:\(f_{u,0/1}\) 表示在 \(u\) 子树里面选点且选/不选 \(u\) 的最大值,有 \(f_{u,0}=\sum \max(f_{v,0},f_{v,1}),f_{u,1}=a_u+\sum f_{v,0}\)。

接下来考虑如何维护,可以想到使用树链剖分,考虑如何使用树链剖分的性质,然后想到设方程 \(g_{u,0/1}\) 表示和 \(f\) 性质相同但是不考虑重儿子的 dp 值,不妨设 \(v\) 为 \(u\) 的重儿子,可以得到以下 dp 式子:

  1. \(f_{u,0}=g_{u,0}+\max(f_{v,0},f_{v,1})\)。

  2. \(f_{u,1}=g_{u,1}+f_{v,0}\)。

转化为以下的矩阵:

\[\begin{vmatrix}f_{v,0}&f_{v,1}\end{vmatrix}\times \begin{vmatrix}g_{u,0}&g_{u,1}\\g_{u,0}&-\inf\end{vmatrix}=\begin{vmatrix}f_{u,0}&f_{u,1}\end{vmatrix} \]

然后发现一个性质就是只有轻边的 \(g\) 会受到修改的影响,而一次修改最多影响 \(\log\) 个点,所以复杂度是 \(O(\log^2)\) 带大常。

标签:begin,end,max,vmatrix,inf,动态,规划,dp
From: https://www.cnblogs.com/Judgelight/p/17687304.html

相关文章

  • vue+el-timeline动态表格时间线
    原文链接:https://blog.csdn.net/Shids_/article/details/126645038前言当我们需要在页面中展示一系列时间相关的事件时,常常会考虑使用时间线来呈现。而在vue框架中,我们可以借助一些组件库来快速实现时间线的功能。其中,el-timeline就是一款非常优秀的时间线组件,它可以帮助我们......
  • HTML5与CSS3实现动态网页(下)
    js完整的javascript是有ECMAScript(语法)BrowserObjects(DOMBOM)特性组成的。//单行注释/**/多行注释ECMASxript中的一切(变量函数名和操作符)都区分大小写1:什么是标识符变量函数属性的名字或者函的参数2:表示符命名规则有字符数字下划线或$符号......
  • Vue -el-table表格动态控制表头动态展示数据(控制每一列展示)
    前言最近在实际开发中我们遇到一个需求是用户自己控制键值来生成对应表格数据。换个思路就是我们还是正常查询数据,需要一个开关页面来动态改变表格展示每一列。我们需要一个开关页面,里面有多选,确定重置取消,确定时把选中数据传递给父组件,动态数据for循环最好是以封装成组件的形......
  • 一个实际例子演示动态时间规整(Dynamic Time Warping, DTW )算法
    用一个实际例子,演示动态时间规整(DynamicTimeWarping,DTW )算法  动态时间规整(DynamicTimeWarping,DTW)是一种用于度量两个时间序列之间的差异的算法,尤其是当这两个序列出现时间偏移或速度不同的情况。例如,DTW可用于语音识别或股价数据分析。以下是一个简单的DTW算......
  • .NET:使用 P/Invoke 调用 C# 中的 Win32 DLL——本质上和动态加载DLL没有区别
    .NET:使用P/Invoke调用C#中的Win32DLL本质上和动态加载DLL没有区别!!!如下: 在.NET中执行非托管代码时,我们通常想要实现什么?假如是红队,一般想要运行原始的beaconpayload,在该payload中运行C#封装的本地代码。很长一段时间以来,最常见的做法是这样的:[DllImport("kernel32.dll"......
  • HTML5与CSS3实现动态网页(下)
    js完整的javascript是有ECMAScript(语法)BrowserObjects(DOMBOM)特性组成的。//单行注释/**/多行注释ECMASxript中的一切(变量函数名和操作符)都区分大小写1:什么是标识符变量函数属性的名字或者函的参数2:表示符命名规则有字符数字下划线或$符号组成不能以......
  • HTML视频背景(动态背景)
    网页动态背景一般是用视频实现的,能增添网页的感染力,我觉得很好看,也不难,不妨学一下。先加入下面一串代码:1<style>2video{3height:100%;4width:100%;5position:absolute;6......
  • iOS开发Swift-12-列表UI,TableViewController,动态响应Button勾选-待办事项App(1)
    1.创建新项目 为项目添加图标 2.将TableViewController添加到界面中 将箭头移动到TableView上来,代表它是首页(根页面).选中ViewController,点击Delete,对它进行删除.将代码ViewController.swift也删除掉. 新建一个CocoaTouchClass.  将TableViewControlle......
  • 高性能存储 SIG 月度动态:erofs 新增支持多个重要特性,持续构建容器场景竞争力
    高性能存储 SIG(SpecialInterestGroup)目标:存储领域的发展历程,本质上是存储介质与软件栈相互促进发展的过程。高性能存储SIG致力于存储栈性能挖掘,当前主要聚焦内核io_uring技术优化异步IO性能,使用持久化内存提升业务单成本性能,容器场景存储技术优化等课题。高性能存储SIG......
  • 动态规划在二维数组上的运用
    力扣连接:https://leetcode.cn/problems/unique-paths/题目一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例1:输入:m=3,n=......