7
:
50
−
8
:
30
7:50-8:30
7:50−8:30
看题,觉得
T
3
T3
T3 比较像之前做过的题,
T
4
T4
T4 完全无想法,且样例难受。
8
:
30
−
9
:
40
8:30 - 9:40
8:30−9:40
尝试用各种方法搞
T
3
T3
T3 ,一开始觉得放到树上做各种东西的传递还是不太好调试,跑树的时候重新连边,当成一个有向无环图来搞,然后传递的时候每个节点再用 vector
记录下当前单调上升序列的最大值和长度,然后有需要判断的时候做类似背包的状态转移,但是状态转移比较困难且 STL
用着还是比较吃力了些。
然后就还在树上做,自下而上传递些大小和最大值之类的,我觉得如果选了
i
i
i 号节点,那么它的子节点怎么选择都是固定的,很有 动态规划 的味道了,但是卡在了一个节点如果有多个儿子的情况上。在纸上写写画画也没有完全解决,感觉这还得看有多个子节点的节点能不能选择,且上方的改变可能会影响下边的好多都发生改变。
然后就想把每条链拆开来做,但是不会写。
然后考虑能不能设定某个点必选,但是这样每次设定一个必选的点的话,对于其他链又没有影响,还是会陷进刚刚的怪圈里。
9
:
40
−
10
:
50
9:40 - 10:50
9:40−10:50
T
1
T1
T1 中每个区间选择的先后顺序对结果无影响,所以 dfs 得到每个点选或不选的结果,然后计算。时间复杂度
O
(
2
N
)
O(2^N)
O(2N) 左右,能过第一档分。然后考虑第二档分,数据范围应该够一个
O
(
N
2
)
O(N^2)
O(N2) 的算法,所以就考虑 动态规划 ,先后无影响,且读入就是每个区间的左右端点,所以就开始想区间DP。把读入的每个区间里包含了多少个区间算出来,然后看任意一个区间(左右端点恰好是之前读入的某个区间的左端点和某个区间的右端点)中有多少个端点,提前用递推处理出来组合数,然后对于每个刚刚处理出来的区间搞个,然后整个区间里对这样的区间搞乘法原理。但是最后没太推出来。
相当于开考了
3
h
3h
3h 才拿了
20
20
20 分,已经开始很慌了,所以那
20
20
20 分也没打表也没对拍也没扣数据验证一下。
10
:
50
−
11
:
20
10:50 - 11:20
10:50−11:20
基于刚刚就用
O
(
2
N
)
O(2^N)
O(2N) 看每个选不选然后再处理,这时候我又想到
T
3
T3
T3 的第一档分也可以看每个选不选,然后检验是否成立,并同时求出最优的答案。但是没调试出来。
11
:
20
−
剩
下
的
时
间
11:20-剩下的时间
11:20−剩下的时间
搞
T
2
T2
T2 感觉也是数学 +动态规划,最后没有搞出来。
本来技术就不行,时间安排和考试策略上还出大问题,节奏太乱了,还是从低档分写推高档分比较稳一点。从暴力开始写才更能发现些东西,同时也可以方便对拍。这样 T 1 T1 T1 的 20 20 20 肯定好拿, T 3 T3 T3 第一档分的 10 10 10 也没问题, T 2 T2 T2 是该能想出正解的东西, T 1 T1 T1 是个绿题,心态好点时间充足的话也可能在考场上就 A A A 掉,并不需要太多比较男的东西。 T 4 T4 T4 深搜稳点写个好点的深搜也能搜到 10 10 10 分。
T
3
T3
T3 搞上头了,正解的话是经典的求树上最长上升子序列。题解中的启发式合并根本没想到。平时题做太少了。对于求树上最长上升子序列,用set
维护的话搞起来就比较容易了。(还不知道set
里竟然也支持swap
)
T
1
T1
T1 没有任何措施去保证必得分,搞
T
2
T2
T2 的时间匀出来些打个表,扣数据验证验证啥的,也该稳拿些分。而且把题想太难了,正解其实主要就一个有点像组合的小递推式
f
i
=
2
∗
f
i
−
1
+
2
x
f_i=2*f_{i−1}+2^x
fi=2∗fi−1+2x
而
x
x
x 就是右端点小于
r
i
r_i
ri 的区间的数量,读入的时候顺便求个前缀就行。
或者线段树维护DP也可以。
其实想出来是个动态规划,就不该死磕到一个又难处理复杂度又高的上面敲无用的代码做无用功,该多推推式子看能否化简,或者优化降低复杂度,不管是时间上还是空间上的复杂度。
题上这样说,也该很容易想到用个一维的数组就能解决问题的啊。
T 2 T2 T2 首先要用 弗洛伊德 求个 最短路 ,我连这个都没考虑到。而且这个题不太算用到数学,一开始的方向就出现问题了。