时间安排
8:30–9:00 读题,T2,T4应该都是 DP。T3可能是对原图转化去做,估计是和图论有关系的。
9:00–9:30 T1,想到一个贪心,每次考虑最左端和最右端,比较使右端和左端一样的代价和使左端和右端一样的代价哪个更小,贪心选择。直接做使 n^2 ,不过可以用 set 模拟,变为 nlog 。写完后发现常数很大。
9:30–10:40 T2,观察题目性质。要满足题目条件,那么最终序列必然使由两个下降序列构成的,那么 DP 这两个下降序列分别由哪些数构成就行了。问题在于这个怎么 DP 。尝试了几种状态都 WA 了。先写了个状压暴力。
10:40–11:10 T3,暴力模拟。
11:00–11:30 T2,突然想到一个比较好写的 DP ,复杂度 n^2log ~ n^3 ,但实测跑的飞快,对于较大的数据规模稍微有点卡常,于是对于这一小部分打表。
11:30–12:40 T4.思考 T4,发现对于部分分可以暴力 DP ,枚举某个地方是否构成矩形暴力转移。写完修了修 T2 的表。
12:40–13:00 检查
赛后: T1 常数过大直接 T 了30分。
回顾反思
T1: 因为常数原因失分不是一次两次了。这种常数问题一定要注意。 set 常数过于大,能够被其他线性结构代替就尽量用线性结构。
T2: 瓶颈在于 DP 状态的设置。由于 n 个数要分成两个序列,我便变相的对每个序列分别设置维度,但实际上只要在设置状态时限制第 i 个位置与第 i-1 个位置不在同一序列就可以了。另一个点是选择枚举对象,要求 i%j<=2 ,由 i 找 j 是不好找的,但是由 j 找 i 是容易的,于是可以反过来先枚举 j ,再由 j 考虑 i 的贡献。
T3: 属于一个性质题,每次暴力更新被固定的点,若没有被固定的点就随便找一个未确定的点随便赋值,继续更行被固定的点。
T4: