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

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

来句话鼓励自己QAQ

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

posted @ 2020-06-08 21:07  eee_hoho  阅读(45)  评论(0编辑  收藏  举报