2017开学训练第五周周中总结

来源:互联网 发布:京东抢券软件安卓 编辑:程序博客网 时间:2024/05/23 00:02

  这周前几天交错着看了网络流和线段树。

  对于网络流,看了一下费用流的模板,费用流就是最大流的升级版,其要点就是找增广路的时候每次都找费用最低的,最后可以得到最小的费用流。然后看了一下简单的网络流的建模题目,以及方法介绍。刚刚起步发现一是方法不熟练,二是经常建出来反向的模型,但是我按照最大流的做法看好像反向也能做,但还没有具体验证是否这个说法真的成立。另外建模还需要很多很多的有关图论里的知识点,比如路径最短的最大流,建模的时候就需要用到最短路径的算法等等。但是不排除模板还没有看的全面,题目认知不全等原因,所以继续进行知识点的学习。

 然后做了几道有关于树状数组和线段树的题目,线段树中见识到了二维的线段树(约束区间有两个),这个题目数据量很小,所以用线段树再好不过了。这个题目我在做的时候打破了对以前线段树的代码的认知,比如tree[id].l==l&&tree[id].r==r和如tree[id].l>=l&&tree[id].r<=r这两种经典的写法,在理解方面,这是两个完全不同的写法,我一直认为第二个是对的,因为以前试过把树状数组的区间端点输出出来,发现并不是每个端点都能正好遍及的,所以认为第二个做法是对的,后来才理解这原来只不过是两种代码风格,都是正确的,这样我就可以放心的确定自己所需要的代码风格了。比较有特点的还有一道二维取反的题目,这个题目借助区间染色的思路,不过不是+,而是!操作,因为维数较高,可以借助画图理解,加了多少次,减去多少次,都要计算的十分清楚才是(还有一道三维的同样的题目,更为复杂一些)。还有一个比较大的收获就是dp求最大上升子序列的长度的算法的优化,本来想查用线段树的优化方法,可是看了几个博客之后发现都不能很好的解决问题,或者解决的是完全另外一种的问题,所以就学习了一下二分法优化的dp求最长上升子序列的长度。算法的思路就是简而言之就是各得其所,用dp数组存长度为i序列的最优(也就是最低)的下标是谁,搜索的时候用二分,使得算法的复杂度降低到了n*log2n。

  往后的几天就进入假期了,更需要加紧的学习,拓宽自己的知识面和能力,为之后做准备。

原创粉丝点击