总之看上去又是日常挂分场,唉
感觉还是有点可惜的
顺便,现在半边身子还是酸的qwq,虚到自己了
时间安排
7.35-8.00
看题
8.00-8.30
推T1的柿子(详细分析过程写题目分析里了)
8.30-8.40
疯狂回忆线性求逆元怎么求
8.40-9.00
写T1代码
9.00-9.30
不知道为什么和样例对不上,开始自闭查错
9.30-9.45
分析了一下T2,感觉分的比较细,有前三档的大致思路,为了避免细化花费大量时间,于是转头开了T3
9.45-10.00
感觉50档是dfs,写了几个版本都不太对(指样例不过),感觉自己的想法有问题,因为本来就没有很笃定的想法,想的就是记忆化一下,让两个人在取到某个状态时,都是某人在这个状态能取的最大值(可能是取前取后维护的有问题),于是放弃,准备老老实实把T2写了
10.00-11.20
写了T2的前三档,开始开T4
11-20-12.00
基本想明白T4第一档怎么写,开始搞,但越写越复杂,然后最后快交了才调出来(指有了输出),但答案不对,于是就没交。不清楚是我理解的计算方式和题意不同还是中间写假了…
题目分析
T1
还是比较明显的?第一反应是三种dp方法:
- 到x级期望花费多少
- 已经是x级,距离到n级还期望要多少
- 已经是x级,再升一级需要多少花费
先排除了2,因为大等级对小等级的结果有依赖关系,2不好做
然后排除了1,因为会有:x和x-1融合,x失败消失,而回退之后,只需从x-1到x就行,3是最方便维护这个的
所以考虑 f [ x ] = ∑ i = 0 x − 2 f [ i ] + ( 1 − p ) ⋅ ( f [ x − 1 ] + f [ x ] ) f[x]=\sum \limits_{i=0}^{x-2}f[i]+(1-p)·(f[x-1]+f[x]) f[x]=i=0∑x−2f[i]+(1−p)⋅(f[x−1]+f[x])
维护一个前缀和就好了
看起来很完美对不对?
但其实有很多细节:比如放一把0的剑怎么处理,合成1的时候是两把0剑
最开始就因为合成1剑时时是两把0剑,坏了之后不用再补一级这里忘了考虑而查了好久…
T2
考试的时候 先考虑怎么维护取核心这个过程,于是考虑在状态里记录
考虑dp,状态为 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k] 表示考虑过第 i i i 台机器,剩余 j j j个核心,考虑过 k k k个人之后,最大收益是多少
肯定有同学要问:啊这个,怎么判断某个人能不能用状态里的核心呢?
所以考虑直接把核心,人都按 f f f 从小到大排序,这样后面的人一定可以使用前面的核心
接着考虑怎么优化时空
空间考虑滚动数组
时间考虑,卡住上下界进行dp,即维护前缀核心个数 s s s,每次牢牢卡紧就OK
(然后因为subtask挂麻了,我恨,不开longlong见祖宗
T3
不会啊 真不会啊,直观思路在时间分析那一部分了
T4
感觉小部分分是枚举+状压
枚举路径端点,中间哪些位置用磁铁状压一下
需要树上倍增求lca,再开个数组维护链上存在的点
(大概)