一周总结19.6.17-19.6.21

回到(slyz)高中部的第一周,感觉一个星期过得好快啊,还想着趁那些dalao不在偷偷多学点,本来以为会很不愉快,但是也挺快乐的。

周一回来把咕了一个月的树剖题给调好了(到底是哪出锅我也记不清了),就开始学平衡树,先看的二叉搜索树((BST)),然后是(Treap),把板子题打了,之前听说有个叫(Splay)的,就开始学,学着学着就自闭了,本来对平衡树的旋转就理解的有点乱,再一看那个彻底懵逼了,于是弃疗……

打完平衡树的题(其实都很裸),就往后学(dp)了,刚开始是区间(dp),这个还好,以前也写了一些这方面的题,挺好理解。

接下来是树形(dp),刚开始对这种(dp)方式不太习惯,因为自己没写过递归或者说是记忆化搜索(也不能算是记忆化搜索),但是本质都是从已知往未知转移,只不过树形(dp)是先到叶子节点(相当于(f[1])(f[0])转移过来),这样也就能明白了。

然后是数位(dp),一本通给的那道引例好难(自我感觉),自己yy了一晚上,后面的题就都是板子了,主要思想就是从最高位到最低位进行记忆化搜索,把各种状态带上,更新就完事了。

到了状压(dp),这个难度不大,对状态压缩一下,变成一串数(通常是二进制),这样二维就变一维了,转移方程也一般是用(f[i][j])表示前(i)个用第(j)种状态的最优解,转移随便转移就好了

最后是(dp)的两种优化方式,第一个是单调队列优化,为了学单调队列,专门跑去写了滑动窗口,单调队列是个很强大的东西,可以在队尾插入和弹出,队头弹出,队头访问,有些转移方程长成(fi=max(fj-sj)+si)之类的,其中(j)在一个长度固定的区间,那么中间的(max)就可以用一个单调队列来维护,时间复杂度就可以降一个方。

斜率优化也不是很难,是对于那些转移方程长成(fi=max(fj+si+sj+ti imes tj))这样的,中间有个(ti imes tj),那么我们可以把这个化为一个形如(y=kx+b)的一次函数,其中只含(j)的项为(y),含(i*j)的项为(kx),这里面含(i)的为(k),含(j)的为(x),其他的就是(y)了,会有很多决策点,它们会长成像凸包一样的东西,当我们将一次函数平移,第一个碰到的点就是最优决策点了,这种题一般会有几种情况:1.(k)是单调的,决策点有顺序,那么就可以用单调队列维护;2.(k)不单调,我们要用队列来维护凸包,每次找最优决策点时二分查找,复杂度就多了个(log);3.决策点也无顺序,那就要用一些数据结构来维护,比如平衡树。

写完了(dp),去数论开了个头,把快速幂和质数给写了写,有的以前自己会,但再看之后再写一遍板子真的有不同的理解,数论一直是自己的弱项,希望下周能学完并有所提高。

来句话鼓励自己QAQ

我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。

原文地址:https://www.cnblogs.com/sdlang/p/13068300.html