7.23考试总结
首先%%%Zesty_Fox学长,本次%你考由他搬题和数据,同时,为了考验我们的代码习惯,缩小了数据的时空范围,加强了同学们的卡常能力。(上述废话
哦哦对了,这次是dp专题测试。
T1
滑雪,直接 \(O(n^2)\) 记搜秒过,总用时大概 \(15\min\)。但是下考场测 luogu 数据是 TLE on #2 的,学长的数据倒是过了,有些奇怪。
T2
涂色,这个一眼区间 DP,但是忘记柿子了(悲,考场简单想了一下:设 \(dp_{i,j}\) 表示 \(i\) 到 \(j\) 满足条件的最小代价。初始状态肯定是
如果对于任意满足 \(1\le i\le j\le n\) 的 \(s_i\) 和 \(s_j\) 相同,那么很显然是在画的时候直接从 \(i\) 到 \(j\) 一次性画过,而不同则必然有一个是断点,从这里开始,两段颜色发生改变。枚举该断点即可。
则有:
写完前两题大概是 \(50\min\),也就是 \(8:50\) 左右,看上去时间还很充裕。(flag?
T3
大意是给一棵树,定义两点的距离为最短路径经过的边的条数,求有多少对距离为 \(k\) 的点对。
其实可以淀粉质,但是不是很好想+考场上不敢写遂尝试写其他做法。
推了挺久的 dp 没太推出来,反复的设状态,推转移,然后 hack。大概是到了 \(10:30\),我意识到树形 dp 的正解可能真的难以推出来。遂放弃正解,打了个暴力走人。
我的思路局限在用根节点去更新答案,事实上应该从叶子节点往上推,或许一开始的思路错误,给我造成了误导。或许换个思路多推一会儿就能想到正解了,但为了给后面的题腾时间先这样吧。
对于每个点 bfs 一遍,复杂度大概是 \(n^2k\),拿到了一个还算可以接受的暴力分。
T4
给定 \(l,r,k\),求 \([l,r]\) 内各数位
上包含的数种不超过 \(k\) 的数之和。
显然的数位 dp,转化为 \(sol(r)-sol(l-1)\),设 \(dp_{i,j}\) 表示 \(i\) 位数字共有 \(j\) 种数字。然后先用 dp 预处理出答案,口胡了一个转移方程,但是细细想来却没有正确性。而且查询时的边界也很难处理。大概是 \(11:20\) 放弃正解,考虑暴力。
看到特殊性质 \(k=1\),直接手写 \(log_{10}\) 然后乱搞。随后加上一些没任何效果,纯属心理安慰的特判,最后暴力枚举,拼一起的暴力分对我来时也还算 OK 了。
打完这题杂七杂八的东西后上了个厕所。大概是 \(11:40\) 左右
T5
题面。首先想到 01 背包,然后看数据范围还是算了。
然后在草稿纸上糊啊糊,啥都没糊出来。看到数据范围给了一个 \(c_i\) 都是 \(1\) 的性质。直接排序依次取得贪心。打完这个后一看时间竟然已经 \(12:10\) 了!努力的还想搞点分,翻啊翻,没找到其他题有什么特殊性质了。
出于一种奇怪的心理,我放弃了 T5 的特判,全部改为了贪心。然而,我在写贪心的时候只考虑了 \(c_i=1\) 的情况,而全是贪心的时候 \(k\) 减着减着会有负数而不经过 \(0\)!然后到手的 \(10pts\) 没了。
这里考虑的确实不是很细致,只想着匆匆了事,有点心浮气躁了。
临近交卷
在写完 T5 上完厕所冷静后,我开始检查文件。突然,我发现:调用了 INT_MAX 但是没调用万能头,,,只写 iostream 在 dev-c++ 是会自动补全头文件而不报错或触发警告的。手抖着修改完后一阵后怕:以后一定都要写万能头,千万不能图编译速度写 iostream。(又是一个 flag
最后
拿到了 100+100+55+40+0=295pts 的成绩,暴力拿的还算可观。wxy 小朋友没写万能头后使用 vector 后 dev-c++ 自动补全没报错,CE 了,挂掉 100pts,默哀。