首页 > 其他分享 >动态dp

动态dp

时间:2024-09-23 16:47:42浏览次数:6  
标签:begin end bmatrix 动态 dp 乘法

动态DP

从一道简单的问题说起

  • 有一个长度为 \(n\) 的序列 \(a_i\),每个数可以选或者不选,但相邻两个数不能同时选,最大化选出的数的和。

有一个简单的 \(dp\),设 \(f_{i,0/1}\) 表示前 \(i\) 个数,第 \(i\) 个数是否选了的最大价值,转移时

  • \(f_{i,1}=f_{i-1,0}+a_i\)
  • \(f_{i,0}=\max(f_{i-1,0},f_{i-1,1})\)

现在把这个问题加强一下:

  • 有一个长度为 \(n\) 的序列 \(a_i\),每个数可以选或者不选,但相邻两个数不能同时选,最大化选出的数的和,需要支持单点修改和对区间查询。

我们可以把转移写成矩阵的形式:

\[\begin{bmatrix} f_{i,0}&f_{i,1}\\ \end{bmatrix} = \begin{bmatrix} f_{i-1,0}&f_{i-1,1}\\ \end{bmatrix} \times \begin{bmatrix} 0&a_i\\ 0&-\infty\\ \end{bmatrix} \]

其中矩阵乘法定义为 \((\max,+)\) 乘法。

不妨令

\[M_i= \begin{bmatrix} 0&a_i\\ 0&-\infty\\ \end{bmatrix} \]

那么答案可以写成

\[\begin{bmatrix} 0&0\\ \end{bmatrix} \times \prod\limits_{i=1}^nM_i \]

现在是单点修改,区间查询,我们可以用线段树维护区间内的 \(M_i\) 的乘积,因为矩阵乘法有结合律所以这样做是正确的。

这样子就可以在 \(\Theta(n\log n)\) 复杂度内解决这个问题。

类似上面的过程,在解决动态,范围查询的动态规划问题时,用数据结构维护矩阵乘法的方式也被称为动态 dp,也可以简称为 ddp。

树上的情况

P4719 【模板】"动态 DP"&动态树分治

没有修改时,设 \(f_{x,0/1}\) 表示 \(x\) 子树内,节点 \(x\) 是否选了的最大权值和,转移是显然的:

  • \(f_{x,0}=\sum\limits_{y\in son_x}\max(f_{y,0},f_{y,1})\)。
  • \(f_{x,1}=\sum\limits_{y\in son_x}f_{y,0}\)。

标签:begin,end,bmatrix,动态,dp,乘法
From: https://www.cnblogs.com/jesoyizexry/p/18427295

相关文章

  • 【题解】Solution Set - NOIP2024集训Day36 dp 优化 + 状态设计
    【题解】SolutionSet-NOIP2024集训Day36dp优化+状态设计https://www.becoder.com.cn/contest/5550最后一题较难。「NOIP2023」天天爱打卡考虑dp。\(f_{i,j}\):前\(i\)天,到第\(i\)天为止连续打卡\(j\)天。有转移:\[f_{i,0}=\max(f_{i,j})\\f_{i,j}=\max(f_{i......
  • 代理模式 - 动态代理
    动态代理的APIProxy动态代理类生成代理对象:Proxy.newProxyInstance(类加载器,接口数组,处理器)类加载器:对象.getClass().getClassLoader()接口数组-被代理类的所有接口:被代理对象.getClass().getInterfaces()处理器:代理对象调用方法时,会被处理器拦截InvocationHa......
  • Axure原型设计:多层级动态表格
    多层级表格又成为树形表格,是在后台常用的一种表格形式,当表格数据存在多层级关系是,可以通过多层级表格,从而更加清晰的呈现数据内容,帮助人们更好地理解和分析数据之间的关系,从而更加有效地传递信息。所以今天作者就教大家怎么在Axure里制作多层级动态表格,包括展开、折叠、增加、修......
  • windows下UDP端口测试
    1、下载netcat下载地址:https://eternallybored.org/misc/netcat/2、安装netcat解压之后,把安装包配置到环境变量中去3、UDP端口测试 4、需要注意的问题 ......
  • 访问WordPress网站提示“建立数据库连接时出错”或者“Error establishing a database
    当访问WordPress网站时出现“建立数据库连接时出错”或“Errorestablishingadatabaseconnection”的提示时,这通常表示WordPress无法成功连接到数据库。以下是几个可能的原因及解决方法:原因数据库连接信息错误:WordPress配置文件中的数据库连接信息(如用户名、密码、主机名)不......
  • wordpress网站维护教程:不能上传文件,数据库报错的解决方法
    当WordPress网站遇到不能上传文件或数据库报错的问题时,这可能会影响网站的正常使用。下面分别针对这两种情况提供一些可能的解决方法。不能上传文件权限问题:检查上传文件的目标目录权限是否正确。通常,WordPress的上传目录(默认为/wp-content/uploads/)应该具有可写的权限。你......
  • 如何处理WordPress网站提示“建立数据库连接时出错”或“Error establishing a databa
    解决WordPress网站“建立数据库连接时出错”或“Errorestablishingadatabaseconnection”问题当您在浏览器中访问WordPress网站时,可能会遇到以下错误提示:“建立数据库连接时出错”“Errorestablishingadatabaseconnection”这通常表示WordPress无法正常连接到MySQL......
  • Wordpress独立站数据库连接错误的三种解决方式
    当遇到WordPress独立站出现“数据库连接错误”时,可以按照以下步骤进行排查和解决:检查数据库服务状态:确认MySQL数据库服务是否正在运行。可以通过SSH登录到服务器,然后使用systemctlstatusmysql(对于systemd管理的服务)或servicemysqlstatus(对于SysVinit管理的服务)命令来检查......
  • wordpress建立数据库连接时出错怎么办
    当WordPress提示“建立数据库连接时出错(ErrorEstablishingaDatabaseConnection)”时,通常是因为WordPress无法成功连接到MySQL数据库。这可能是由于多种原因造成的,下面是一些排查和解决问题的步骤:检查数据库信息确认wp-config.php文件中的数据库信息是否正确,包括数据库名称......
  • WordPress网站遇到“数据库连接错误”报错解决方法
    当遇到WordPress网站出现“数据库连接错误”时,可以通过以下步骤来逐步排查和解决问题:1.确认数据库连接信息用户名和密码:确保数据库用户名和密码正确无误。服务器地址:确认数据库服务器地址(通常是localhost,但也可能是其他地址)正确无误。2.检查wp-config.php文件打开wp-......