考场上
大概看了 10 m i n 10min 10min 的题, 然后到 8 : 40 8:40 8:40 的时候写了个 T 2 T2 T2 的二进制枚举状态的暴力,不失误的话是 40 40 40 分。有点像【费解的开关】,只是把二维平面放到了树上,但是依然满足一些性质,所以比较好水
顺序的先后无所谓
不会重复按一个开关
然后开始搞
T
1
T1
T1 ,
想了
10
m
i
n
10min
10min 的贪心,只以价值为第一关键词,但是感觉会被各种卡死,又想以区间大小为关键词,有的区间会很大的话,往后面的每次枚举都会造成很大影响。很快就排除掉。
到
9
:
10
9:10
9:10 的时候想到了另一个思路的贪心,以区间左端点为第一关键词,然后扫一遍,但是每次如果不满足的话需要回溯,而且还是以价值来判断要啥,叠起来的话又需要需要判断要哪个,可能 我现在要了第
i
i
i 个,然后到第
j
j
j 个的时候不影响第
j
−
1
j - 1
j−1 个去吃,但是右端点所能覆盖的区域可能会吃掉第
i
i
i 个右边能吃的
(
i
<
j
)
(i < j)
(i<j)
所以
9
:
20
9:20
9:20 的时候卡壳了,
9
:
30
9:30
9:30 觉得可能可以搬到图上做拓扑,推到
9
:
40
9:40
9:40 感觉也会被卡,但还是写了,
到
10
10
10 点写完了拓扑上的贪心,但是过不了样例,开始打表查错
10
:
10
10:10
10:10 发现自己没有调用拓扑的函数,我是dsb,调用后就能骗过样例了
按一定顺序枚举不管用的时候我就想到了用动态规划,但是既然没有顺序就应该不是线性的,然后奶牛是一个一个的区间,所以又想到 区间DP,用二维的
f
[
i
]
[
j
]
f[i][j]
f[i][j] 表示从
i
i
i 点到
j
j
j 点的贡献搞不出来,区间一层一层叠加跟个染色的过程一样,不知道每次的状态咋转移,然后放弃
11
11
11 点的时候打出来了
T
4
T4
T4 的特殊数据
20
20
20 分
如果只有一个点的度数大于
2
2
2 的话,就把它当做根节点搞,求出每个儿子的 size
值就是这个对应的儿子的链的长度了,根有奇数个儿子的话就把最大的放一边,然后次大的和最小的连起来当一根链,次小的和次次大的一起,以此类推。偶数的话就最大和最小,次大和次小,以此类推。
对于除了特殊数据的分怎么打,思维上卡到了这里
不知道该选择哪条路径,如何判断
最后一点时间写个 T 3 T3 T3 的 O ( 3 N ) O(3^N) O(3N) 的 dfs 枚举每个方格放苜蓿洒水器或者甜玉米洒水器或者啥也不放,最后再验证是否可行,水 20 20 20 分。
11
:
50
11:50
11:50 检查了遍 freopen
,
11
:
55
11:55
11:55 的开始写总结
复盘
算是稳扎稳打了吧,简单的分都拿到了,前三道题看出来是动态规划了,但是不会写。
T
1
T1
T1 比较鸡肋的是看出是区间 DP 也不会。
T
4
T4
T4 二分想到了,也想过直接用动态规划写,但是没有想到两者结合起来用动态规划验证二分。
仔细想想的话节奏还是不太好,应该所有暴力都打完了再考虑中档分或者正解,这会算是没有在调代码上浪费太多时间才勉强写了三个题的暴力。
很难受的是花费精力最多的 T 1 T1 T1 没有分。
部分分拿满了,但是相较而言思维上的运动不够,思考的深度不够,比如最后的排名,有两位大佬 A A A 了题,就直接在我头上了,所以是要有 A A A 题的梦想。
早上刘老师说的话还是很对的,要么思维跟上能 A A A 题,要么不出错暴力打满。(我这样的菜鸡还是做后者吧
中午 jkh 大佬给我说他 T 1 T1 T1 想到的是最大生成树,只是听着有点像我拓扑的那个做法,但是我不太理解。
看题解后
T
1
T1
T1 的话没有想到先用个三维的数组f[i][j][k]
预处理出来在第
i
i
i 个还没吃掉时,区间[j ,k]
中最大的价值。感觉难点主要就是在这里吧,处理完这个后的状态转移方程还是很常规的
f
[
i
]
[
j
]
=
m
a
x
(
f
[
i
]
[
j
]
,
f
[
i
]
[
k
−
1
]
+
f
[
k
+
1
]
[
j
]
+
某
东
西
)
f[i][j] = max(f[i][j] ,f[i][k-1]+f[k+1][j]+某东西)
f[i][j]=max(f[i][j],f[i][k−1]+f[k+1][j]+某东西)
T
2
T2
T2 想到的那个类似的题虽然是状态压缩,但是这个题我从头到尾竟然没有往状态压缩上想,以为是个奇怪的树上DP,而且数据范围的n<=40
让我更没去往装压上想。
题解上说用 map
来存到达每个状态的最少操作后,但是我不会折半搜索,所以也没有从n<=40
上想到用折半搜索只处理一半。 而且想不到这时候是用异或的方式存某一位是否更改了。
T
3
T3
T3 考场上想到的动态规划是在一整个平面上自上而下自左而右,看f[i][j][k]
(第i行第j列,k表示放什么或不放东西),像递归求组合那样,但是又不知道该怎么判断是中间过程否合法,以及最后结果是否合法。题解中的方法肥肠巧妙,f[i][j][0/1]
在第i行第j列时从上一个点到这一个点是上下的还是左右的,有拐角的地方必放喷洒器,其他的话就跟乘法原理一样乘个
2
n
2^n
2n ,就行。
如果从(1,1)走到(n,n)划分个界线,不管怎么走,折线的地方是必放的,这个性质很明显,但是考试的时候太随意了,没往这边想,要是能想到的话,就也该很轻易想到剩下的点是
2
n
2^n
2n,每个点放原本就覆盖该区域的东西或者啥也不放。