背景:czy上课讲了新知识,从未见到过,总结一下。

所谓动态dp,是在动态规划的基础上,需要维护一些修改操作的算法。

这类题目分为如下三个步骤:(都是对于常系数齐次递推问题)

1先不考虑修改,不考虑区间,直接列出整个区间的dp方程。这个是基础,动态dp无论如何还是dp(这一步是一般是重点)

2.列出转移矩阵。由于有很多修改操作,我们将数据集中在一起处理,还可以利用矩阵结合律,并且区间比较好提取,(找一段矩阵就好了),修改也方便。

3.线段树维护矩阵。对于修改,我们就是在矩阵上进行修改,对于不同的题目,我们要用不同的修改方式,和记录手段。但是都是线段树一个节点维护的是这个区间内矩阵的信息。如矩阵乘积,矩阵和等等。线段树的区间优势,可以应对区间修改问题。

T1:HDU5068

这里,由于是单点修改,所以直接到叶子节点,修改后再pushup就可以了。

线段树维护区间内矩阵乘积。

T2:CF  Sasha and Array

就是斐波那契数列。

这里的可以原因是:提出B,因为矩阵右分配律,再提出一个M^x,还是矩阵右分配律。注意这里M^x,B是不能交换顺序的。但是M^x放在求和的前边乘,还是后边乘是无所谓的。因为都是M

可以用左分配律,也可以用右分配律。

其实代码不难想。

1.laz标记应当建一个和t[4*N]一样的laz[4*N],这样,每个结构体只存一个矩阵a,不但节省空间,而且内置函数的矩阵乘法还方便,因为无论如何都转移到a矩阵,而不用考虑是a乘laz还是laz乘laz。

2.数组越界了,被卡了很长时间。开a[3][3]就可以,没有发现的原因是,c++本地编译不会RE,放到CF上就会出现奇怪答案,而且莫名有的地方数组内的值就变了,比如说突然都变成0

3.注释不要太多,以免掩盖正解,导致把laz 下放注释掉了。。。

T3:

本质不同:不一样。长度不同,或者长度一样对应位置数字不全一样。

注意是子序列不是子串

注意,为什么用f[i][0/1]?因为当最后一位不一样时,这两个子序列一定不一样,所以f[i-1][0]和f[i-1][1]中的每一个都是不一样的。

并且,这还跟原数组数值0/1挂钩,很好联系上了。

加的一个1是就取这一位,其实是之前每一个都多了一位,就没有了最初的长度为一的子序列。所以加上。

也就是说,区间矩阵乘积结果的矩阵可以直接进行翻转,先翻再乘,和先乘再翻没区别。

直接正常维护就好,加一个rev标记。

转载于:https://www.cnblogs.com/Miracevin/p/9124511.html

[动态dp]线段树维护转移矩阵相关推荐

  1. 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/E?&headNav=acm 来源:牛客网 Given a maze with N rows an ...

  2. Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake 线段树维护dp

    D. Babaei and Birthday Cake 题目连接: http://www.codeforces.com/contest/629/problem/D Description As you ...

  3. YBTOJ:采矿战略(线段树维护dp、树链剖分)

    文章目录 题目描述 解析 代码 题目描述 所谓线段树维护dp,就是在线段树上维护dp (逃) 解析 把树剖一下后就变成了区间问题 考虑建一棵线段树,每一个结点都是一个背包 这样就能区间查询,也能带修了 ...

  4. 【BZOJ2164】采矿 树链剖分+线段树维护DP

    [BZOJ2164]采矿 Description 浩浩荡荡的cg大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略.这个城市可以看成一棵有n个节点的有根树,我们把每个节点用1到n ...

  5. Codeforces 833B 题解(DP+线段树)

    题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...

  6. BZOJ 1852 [MexicoOI06]最长不下降序列(贪心+DP+线段树+离散化)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1852 [题目大意] 给你N对数A1,B1--An,Bn.要求你从中找出最多的对, 把它 ...

  7. CodeForces - 1252K Addition Robot(线段树维护矩阵)

    题目链接:点击查看 题目大意:给出一个只由 A 和 B 组成的字符串 s ,需要完成 m 次操作,每次操作分为两种类型: 1 l r :将 [ l , r ] 内的字符串 A 变成 B,B 变成 A ...

  8. Codeforces Round #603 (Div. 2) E. Editor 线段树维护括号序列

    传送门 文章目录 题意: 思路: 题意: 思路: 首先一个括号序列合法的条件可以转化成两个(左括号代价为111,右括号代价为−1-1−1): (1) 左括号个数等于右括号个数. (2) 括号的前缀和非 ...

  9. 线段树维护(最大区间和,最大子段和,最长连续上升子序列)

    本文主要介绍用线段树来维护(最大区间和,最大子段和,最长连续上升子序列)的问题. HDU 1540 Tunnel Warfare(最长连续区间+单点修改) 洛谷 P2894 [USACO08FEB]酒 ...

最新文章

  1. 高职信息安全比赛攻防思路_30.LNGZ2020-30:2020年辽宁省职业院校技能大赛(高职组)“信息安全管理与评估”赛项规程...
  2. 关于Spring Boot你不得不知道的事
  3. 005_Spring的属性注入
  4. BZOJ2490 Zombie’s Treasure Chest
  5. 【推荐】一款快速预览神器:QuickLook
  6. 『设计模式』Web程序开发最基本的编程模式--MVC编程模式
  7. leetcode 1584. 连接所有点的最小费用(并查集)
  8. 信息学奥赛一本通 1106:年龄与疾病 | OpenJudge NOI 1.6 05
  9. minianaconda安装图形化界面
  10. 中九天线调节经验总结
  11. 重定向程序中的系统输入输出
  12. AndroidTv开发中常用的adb命令
  13. 自定义微信小程序导航(兼容各种手机)
  14. 文电通PDF编辑转换器[DocuCom PDF Gold] 8.0
  15. PackageManager使用
  16. 黑月教主去水印软件_去除图片/视频去水印!这个软件可以帮助你!
  17. Android放大镜实现的两种方式
  18. 做好这几点,安心睡个好觉
  19. 姓名拼音首字母缩写_公司首字母缩写
  20. 用php编写的简单个人主页,如何制作个人主页

热门文章

  1. Unity3D脚本属性
  2. 进驻宝岛 不闪式3D热潮来临?
  3. react创建组件_如何使用React创建时间轴组件
  4. chatscript_如何使用ChatScript构建您的第一个聊天机器人
  5. Docker的使用(一:Docker入门程序)
  6. 将Spring Boot项目打包成jar包war包
  7. 软件缺陷生命周期图示及当中涉及到的缺陷的状态
  8. mysql数据库优化命令_MySQL数据库优化总结
  9. 参加UI设计培训要学多久
  10. 参加java培训都有哪些学习阶段