学习笔记:动态规划

最近写了一些动态规划……简单总结一下

区间DP

做了好多道感觉都非常套路……就感觉都和合并石子长一个样。无非就是区间从短到长依次更新,然后还有一些奇奇怪怪的转移方法(这个就因题而异了)。区间DP唯一考点可能就是这些奇奇怪怪的判断了……

树形DP

树这种东西,一般都是从子树的状态然后转移到父亲(然而并不全是)。一般看到树形DP先想能不能从子树转移,如果不能再考虑其他奇奇怪怪(?)的方法。

做树形DP的时候做到了一个叫基环树的东西,这玩意儿满足一个性质,他带环。……

环上的边任意删去一条然后就成了一棵正经树。

为了考虑周全,一般都对边两端的点分别做根各DP一次,防止两个点的状态相互影响。

http://blog.sina.com.cn/s/blog_140e100580102w8x9.html

这篇blog到时候再找时间填了吧……现在就先不填了

状压DP

这类题做的并没有几道,因为学长告诉我状压最重要的是思想。(其实是我只会写板子题……)

状压就是对于状态量少的来说,可以用0,1将所有状态表示出来然后进行转移。

一定要用好位运算!(不然状压DP就废掉了)

网格DP

比较灵活……我也没写过几道。

数位DP

一般用于统计[l,r]内符合条件的数的个数。所有我们可以用ans(r)-ans(l-1)来求得个数。

其实我觉得数位DP就是一个NB点的枚举

不过其灵活的地方在于枚举到某一位的时候如果后面要枚举的东西你已经枚举过了,那你就可以直接运用之前的答案(记忆化)或者O(1)计算(比如排列组合什么的)直接求得后面的答案。感觉还是蛮暴力的……

斜率优化DP

总感觉我理解的斜率优化DP和别人的理解不太一样……?

算了不管了

如果一个式子可以化成类似f[i]=kx+b的形式,那么对于当前i,我们可以将i代入这个前面的每一个状态j的斜线,以此求得f[i]。

一般若某一项是i相关和j相关的,i相关为X,j为K。其余i相关为无关变量,j相关为B

我们根据斜率的上升(下降)来维护凸包。用单调队列维护即可。具体内容我也不是很能讲懂,结合zyf2000学姐的blog看例题可能就非常好懂了。

矩阵优化DP

之前自己写过矩阵相关的笔记……但仅限于一点皮毛。

觉得俞华程《矩阵乘法在信息学中的应用》的题目还是比较经典的。

原文地址:https://www.cnblogs.com/refun/p/8686075.html

时间: 2024-11-10 14:57:12

学习笔记:动态规划的相关文章

由LCS到编辑距离—动态规划入门—算法学习笔记

一切计算机问题,解决方法可以归结为两类:分治和封装.分治是减层,封装是加层. 动态规划问题同样可以用这种思路,分治. 它可以划分为多个子问题解决,那这样是不是用简单的递归就完成了?也许是的,但是这样会涉及太多的不便的操作.因为子问题有重叠! 针对这种子问题有重叠的情况的解决,就是提高效率的关键. 所以动态规划问题可以总结为:最优子结构和重叠子问题. 解决这个子问题的方式的关键就是:memoization,备忘录. 动态规划算法分以下4个步骤: 描述最优解的结构 递归定义最优解的值 按自底向上的方

NLTK学习笔记(四):自然语言处理的一些算法研究

自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结的自然语言中常用的一些基本算法,算是入个门了. 递归 使用递归速度上会受影响,但是便于理解算法深层嵌套对象.而一些函数式编程语言会将尾递归优化为迭代. 如果要计算n个词有多少种组合方式?按照阶乘定义:n! = n*(n-1)*...*1 def func(wordlist): length = le

Android学习笔记-回顾计划

人最怕的是,没有方向! 1.楔子: 本人接触Andrjoid开发也有一年多了,期间在一家外包公司独立开发了五六个项目.虽谈不上大牛,但自认小有所成.平时没什么爱好,就喜欢看看技术博客,试验各种开源代码,写写学习笔记. 最近感觉有点陷入瓶颈了,进步甚慢,却又不知该如何进一步提升自己.对于开发中遇到的很多问题,虽有所领悟,然不够系统,一些小知识点,也常有遗漏.觉得是时候系统的反思一下自己的知识体系了,于是决定制定一个回顾计划,综合自己看的博客.书籍,以及自己的开发实践,对一些常用的知识点进行整理.

算法学习笔记 最短路

图论中一个经典问题就是求最短路,最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划,这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是很好理解的,理解透自己多默写几次即可记住,机试时主要的工作往往就是快速构造邻接矩阵了. 对于平时的练习,一个很厉害的 ACMer  @BenLin_BLY 说:"刷水题可以加快我们编程的速度,做经典则可以让我们触类旁通,初期如果遇见很多编不出,不妨就写伪代码,理思路,在纸上进行整体分析和一步步的演算

数字语音信号处理学习笔记——绪论(2)

1.2.2 语音编码 语音编码的目的是在保证一定语音质量的前提下,尽可能降低编码比特率,以节省频率资源. 语音编码技术的鼻祖: 研究开始于1939年军事保密通信的需要,贝尔电话实验室的Homer Dudley提出并实现了在低频带宽电话电报电缆上传输语音信号的通道声码器. 20世纪70年代:国际电联(ITU-T,原CCITT)64kbit/s脉冲编码调制(PCM)语音编码算法的G.711建议,它被广泛应用于数字通信.数字交换机等领域,从而占据统治地位. 1980年:美国政府公布了一种2.4kbit

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件