暑假集训总结

结束了为期1个月的暑假集训,在这认识了很多小伙伴,也学了很多知识,很充实的一个暑假。
只是DD太爱睡懒觉了,以至于第2天集训的时候被费老骂了一顿,说 你们俩个以后再来那么晚就回家吧!
事后DD还偷偷告诉我 他get了一个可以提前回家的技能。
后来在我的监督下,我们就再也没有迟到。一直兢兢业业,勤勤恳恳的训练。
总结一下这个月学的知识。
这个月一直死磕dp了。
第一个周~
学了状态压缩dp,一开始刚接触的时候,看了一上午都没看懂是怎么回事,下午的时候和DD和LYF讨论了一下,慢慢摸索到了状压dp的一些套路,后来做了几道题,发现状压dp大致思想就是,将一个状态压缩成一个数以达到节省空间的目的。
比如说有n个物品,每个物品有两个状态取或者不取。那么取就可以用1来表示,不取就是0。那么1100(二进制)=12(十进制)。那么12这个数代表的意思就是,取第3,4件物品。不取1,2件物品。
状压dp的做题的套路:
1.分析,找出合适的状态。
2.枚举状态。
3.根据题意找出符合要求的状态。

第二个周~
学了数位dp。这里的知识没有状压dp掌握的牢固,DD直接放弃了这一块的知识点。这里的处理余数不太懂。
其实我觉得这里掌握不好的主要原因就是DFS学的不好。这里的题一般都是DFS+记忆化搜索。
数位dp适合在一段数的区间内找出满足某些条件的数的个数,这个时候往往不能之间遍历,肯定会超时,则一般使用数位dp来解决。

数位dp的常见形式是dp[i][j],表示开头是j的i位数满足条件的有多少个,当然也有其他dp[i][j][k]等等,但i,j,k都很小,不会像直接遍历那么耗时。

以前做过一个不要62的题(HDU2089),当时没用数位,直接枚举也过了。
还有一个比较简单的是HDU3555,就是统计一个区间内带49的数的个数。
像这种基础的数位dp,基本上都是找出第i位与i-1位的关系,这两个题中的关系很明显。算是数位dp的入门题。

然后比较难一些的数位题,一般都要同余定理。比如说HDU3652。大致题意就是,在一个区间内找出有多少含有13并且能被13整除的数的个数。前面那种题,一般前一位都和后一位有明显的关系,比如说第i位为 6 那么第i-1位就不能是2。

第三个周~

这个周学了树形dp,树形dp简单来说就是在树上的dp,这里的很多题,都和背包有联系,从一个根节点开始,分配方案给它的子树。
这里的一般都是结合背包和DFS。

第四个周~
有一天晚上DD突然跟我说他想回家了。我还说他为什么会有这种可怕的想法,在这里训练不好吗。但是一想到回家,心里就好激动啊。( ∩_∩)

最近状态还好,少玩游戏,多搞题~~~
还有一个星期时间再看看dp的资料。然后就学数据结构。

你可能感兴趣的:(动态规划dp)