作者:米蘭王妃级_608 | 来源:互联网 | 2023-07-26 09:30
7:50−8:307:50-8:307:50−8:30
看题,觉得 T3T3T3 比较像之前做过的题,T4T4T4 的样例都给的比较难受。
8:30−9:408:30 - 9:408:30−9:40
尝试用各种方法搞 T3T3T3 ,一开始觉得放到树上做各种东西的传递还是不太好调试,跑树的时候重新连边,当成一个有向无环图来搞,然后传递的时候每个节点再用 vector
记录下当前单调上升序列的最大值和长度,然后有需要判断的时候做类似背包的状态转移,但是状态转移比较困难且 STL
用着还是比较吃力了些。
然后就还在树上做,自下而上传递些大小和最大值之类的,我觉得如果选了 iii 号节点,那么它的子节点怎么选择都是固定的,很有 动态规划 的味道了,但是卡在了一个节点如果有多个儿子的情况上。在纸上写写画画也没有完全解决,感觉这还得看有多个子节点的节点能不能选择,且上方的改变可能会影响下边的好多都发生改变。
然后就想把每条链拆开来做,但是不会写。
然后考虑能不能设定某个点必选,但是这样每次设定一个必选的点的话,对于其他链又没有影响,还是会陷进刚刚的怪圈里。
9:40−10:509:40 - 10:509:40−10:50
T1T1T1 中每个区间选择的先后顺序对结果无影响,所以 dfs 得到每个点选或不选的结果,然后计算。时间复杂度 O(2N)O(2^N)O(2N) 左右,能过第一档分。然后考虑第二档分,数据范围应该够一个 O(N2)O(N^2)O(N2) 的算法,所以就考虑 动态规划 ,先后无影响,且读入就是每个区间的左右端点,所以就开始想区间DP。把读入的每个区间里包含了多少个区间算出来,然后看任意一个区间(左右端点恰好是之前读入的某个区间的左端点和某个区间的右端点)中有多少个端点,提前用递推处理出来组合数,然后对于每个刚刚处理出来的区间搞个,然后整个区间里对这样的区间搞乘法原理。但是最后没太推出来。
相当于开考了 3h3h3h 才拿了 202020 分,已经开始很慌了,所以那 202020 分也没打表也没对拍也没扣数据验证一下。
10:50−11:2010:50 - 11:2010:50−11:20
基于刚刚就用 O(2N)O(2^N)O(2N) 看每个选不选然后再处理,这时候我又想到 T3T3T3 的第一档分也可以看每个选不选,然后检验是否成立,并同时求出最优的答案。但是没调试出来。
11:20−剩下的时间11:20-剩下的时间11:20−剩下的时间
搞 T2T2T2 感觉也是组合数学 +动态规划,最后没有搞出来。
T3T3T3 搞上头了,而且节奏错了,还是从低档分写推高档分比较稳一点,正解的话是经典的求树上最长上升子序列。题解中的启发式合并根本没想到。平时题做太少了。
T1T1T1 没有任何措施去保证必得分,搞 T2T2T2 的时间匀出来些打个表,扣数据验证验证啥的,也该稳拿些分。而且把题想太难了,正解其实主要就一个有点像组合的小递推式
fi=2∗fi−1+2xf_i=2*f_{i−1}+2^xfi=2∗fi−1+2x
而 xxx 就是右端点小于 rir_iri 的区间的数量,读入的时候顺便求个前缀就行。
或者线段树维护DP也可以。