总结这一个暑假呐,就是被DP虐哭了的一个月,这TM就是一门玄学,没有一定的脑洞,怎么可能学好DP,用抽象的思维将一个大问题拆分成多个阶段决策问题,然后表示每个阶段的状态,再在每个状态之间进行决策的选择。题做多了之后才发现,DP的过程其实就是将状态你前面记录的过程记忆下来,然后后面你进行决策的时候以这个决策为依据进行决策。
初来的那几天
7.21就来学校,一个月的期末复习把以前学的知识忘了不少,来的几天先把以前的题做了一遍,把以前的知识点捡起来,以前做的急没来得及消化,现在又有了很多很深刻理解。话说有时候不静下心来做一件事,效率真的是差的,比如说以前做背包的时候,三种背包说白了就是照着三种背包的模板套模板来解题,碰到稍微变形的题就不会做了,这几天把背包重新看了一遍,还把背包九讲看了一遍,不禁还很多感慨,一是以前理解的真是太浅了,只知道背包要那么写,但是并不知道为什么这么写,这几天有时间静下心来写这个,明白了很多以前不明白的地方,比如01背包和完全背包为什么一个从后往前更新状态,一个从前往后更新状态,从后往前更新状态,每次得到的结果都不会覆盖之前得到的状态这样刚好满足
每个物品都取一遍的要求,而完全背包从前往后更新状态每次得到的结果都会覆盖之前的状态这样就满足每个物品可以取无数次的要求,唉,要是自己肯定想不出来这么好的方法来写这段代码,真是厉害啊。
状态压缩DP
之后就是开始了做状压DP,因为前几天就把状压看了一点,所以理解起来没那么费劲。但是最初的几天就没有这么幸运了,根本不知道状压DP是什么东西,看着邝斌的博客就跟天书一样,幸亏还有点字,本来想知道知道状压DP 的概念就去找相关的课件但是描述的太简略了,幸亏有三个好学长,每天晚上去东校宿舍的路上,我当然不能放过这么好的机会,学长们都是理解了很透彻了,用很通俗的语言给我解释了什么是状态压缩,真的需要高人指点的,这一下就好像是打开了新世界的大门,豁然开朗了。
要点就是用位运算来写状态转移方程,这个地方也是一个难点,以后DP理解都好理解但是状态转移方程就是不好想,比如取状态的时候不是以前那样用循环中的i当作状态,而是将状态压缩之后,用位运算取出每一个你需要的状态,刚开始的几天对位运算还是还不是很了解,虽然想出来状态方程了,但是状态压缩之后的你想要取一个状态没有位运算就很费劲,为此我特意看了两天的位运算,刚开始的时候看的很粗略,到后来才发现光知道他的本质作用是远远不够的,更重要的是知道他是抽象作用是什么,比如用n&1来判断是否为整数,还有用|以及&来取一个压缩状态中的一个取还是不取,对位运算熟练之后,就好多了,刚开始的题都是比较基础的裸的DP题,状态方程很好想,所以真的明白了之后做题就顺利多点了,就是想状态方程的过程比较难办。但是最重要的是看题解的时候坚决不做题,做题的时候坚决不看题解。
数位DP
我感觉数位DP 在这几大类DP中算是最好理解的一类了,就是简单的用dfs类枚举你需要条件的位数,幸亏当初学搜索的时候真的理解了,这里就不是很费劲了,很多抽象的枚举位数。
训练赛小插曲
每个星期二四的训练赛是重头戏,从最开始的只能A一题,到后来的三四题,我觉得这真的是一种成长,从一开始就坚决不看题解,虽然很多次都排在最后,但是这就是一种成长,去掉以前那种离开答案就做不了题的臭毛病,特别是上大学之后,除了搞ACM根本没有动脑的机会,就连考试都只需要背的答案多就行了,这是一种坏习惯,剥夺学生思考的机会,所以说平时多动脑是有好处的,这个改变在大一改变特别明显,大一上学期的时候遇到问题在总是不会选择先动脑,总是先看答案在做题所以成绩都没有什么起色,到了下学期,真的感觉自己学东西都特别快,相比以前,就拿高数来说,平时没怎么学(虽然这是个不好的习惯),但是最后的几天认真的静下心来做了很多题,最后成绩出来之后当然是理想的,比平时好学很好的同学考的还高。
树形DP
重头戏来了,对没错就是树DP,真正的玄学,到现在都不是很明白,但是基本的套路基本明白了,都是建树然后在树上进行DP,因为中间有些事耽误了,所以进展有点慢,到后来,都是在追别人,说起来建树那真的是***(脏字自动省略)还不止一种建树的方法,还没学数据结构真的有点麻烦,幸苦原来学过最短路的建树,现在知道建树的原理了,最初的几天!你知道什么是绝望么!一天就看一个题的建树是什么原理!还没看懂!真的是很***
最重要的是树形DP还有小分类,以前的DP内容都包括在内,在树上进行DP 也是用dfs进行遍历的,真的不是很舒服,因为调的时候很麻烦,输出中间过程这不现实,递归这东西你只需要知道他是怎么跑的就行了,千万别想看看显示的数据是什么,因为这个输入真的太***麻烦了,还有就是在树上进行背包等等,虽然很难,但是很有意思,当你真的明白的时候就很舒服了,就像一个学成归来的少年,到处想找人比试,当你学会一个知识点的时候就是这种心态,想到处找题做做,当你真的做出来一个题的时候那种满足感比拿五杀还刺激,还舒服。
日常篇
暑假的集训条件确实挺艰苦的,但是丝毫阻止不了我们,每天都保持这一个好的作息习惯,早上六点多起床,八点多到实验室,然后就开始一上午的训练,中午出去吃点饭,中午睡个觉,下午在学,五点多去吃饭,吃过饭的时候,回来看一会新闻就开始晚上的学习了,九点半左右就开始往东校走,到了基本上就十点了,洗洗衣服,洗漱一下就躺在床上,和别人扯会蛋,十一点多就睡了,然后第二天照常,每个星期的训练赛都会很兴奋,很刺激,有种未知的感觉,每一次提交都不知道会不会过,当然也有崩溃的时候,被一个水题卡好几个小时的时候,一个题T无数次的时候,但是始终一个原则不能看题解,星期天当然最海皮的时候了,开车!606车队开车,呐喊声!太爽了,一块开车玩游戏,一块喷别人。
总结
人生有多少次能给自己时间用来专心学东西的,很少特别是有这么多志同道合的人一起,不容易,朝夕相处比和亲人呆在一起的时间还要长,若干年之后回忆起来肯定是内心很宝贵的一段回忆。
学习习惯
我觉得还是刚开始最好要对一个知识点概念的介绍,但是学树DP的时候很不好找概念,大都是能找到题解,最好的模式是先看概念,然后找简单的题看看题解是大体怎么样的解题模式,然后就开始做练习题,这样对我很好理解