2017暑假七林集训day11

来源:互联网 发布:生活垃圾的数据 编辑:程序博客网 时间:2024/05/16 11:29

上午

今天因为一些特殊原因,考试的时间被调整到了上午。拿到t1,和昨天一样,并没有什么很好的思路,于是去看t2。t2是一个丢蛋的题,然后发现自己连样例都玩不动,跳过看t3。t3有一个挺容易拿的30分做法,果断写了,先避免爆零。倒回去看t2,准备拿n >= 100的部分分(n >= 100相当于无限蛋),结果测评的时候发现手写log蜜汁挂掉。又返回去看t3,写了个(可能能过一些点的)优化,结果交的时候忘了关调试输出,结果连那30分也丢了。t1还是没什么想法,暴力也没写完。

下午

下午听朱昶宇讲课。t1是一道dp。先用n方的时间预处理区间[L, R]是否可选,若可选,就计算这个区间内不同的数的异或和是多少。dp[i]表示前i个数的最大值。转移的话,这个数不选很明显dp[i] = dp[i-1],否则就枚举区间L,用预处理好的值转移。t2是经典题,有名的鹰蛋问题,也是dp,g[i][j]表示用i个蛋摔j次可以试出多少层,于是显然g[i][j] = g[i-1][j-1](破了)+g[i][j-1](没破)+1。这个问题给我们的启发是如果dp中有一维很大存不下就可以把它丢到值里面去(一个很重要的思想)。t3的话,我们发现,对n方个点的询问是无法避免的,时间的浪费主要在枚举每一行/列上。于是我们可以保存每一行/列的最大dp值,直接转移即可。然后接下来的内容是树形dp。树形dp其实是有一些套路的,一般来说都是用儿子/后代来更新父亲/祖先。不过树形dp的代码量和灵活性都比基础dp大,需要多练题才能掌握。学长还讲了DAG上的dp。DAG上的dp与树形差不多。学长还讲了一些经典题。今天感觉很有收获,学习了一些dp的典型方法,自己的能力有一定的提高。