10 31模拟赛

考试安排

7:40 - 8:00 :开T1,发现是一个神奇状压,但是貌似不是很会
8:00 - 8:50 : 一直在想T1,发现无论怎么设计状态都有后效性,然后就打了个复杂度不太能保证的暴力run到T2了
8:50 - 9:20 : 发现T2很怪,有一点像差分约束,但是好像不是很会
9:20 - 10:20 : 开始看T3了,50分的贪心打假了,然后就胡了一个DP,发现是对的,貌似可以优化成正解,但是还要再想想
10:20 - 11:50 : 应该在想T3的优化和摆烂

收获or反思?

1.DP能力似乎有待提高

[进步科学]:A. 1031模拟赛-A进步科学 - 题目 - 焦作一中信息学训练题库 (code-fans.cn)

貌似可以称作状压经典套路题

如果一次操作结束前不能使用其他的操作,我们发现一位状态 f [ S ] f[S] f[S]表示状态为 S S S的最小时间即可解决

目前唯一的难点在于在一次操作结束前可以使用其他操作,这也就表示了可能会有多种操作在同一时间同时进行

那么最直观的感受当然是 f [ S ] [ T ] f[S][T] f[S][T]表示当前状态为 S S S还有的操作序列为 T T T的最小时间,但是我们发现时间仍然不对

首先我们发现总时间不会超过 2 n 2n 2n

那么上面竟然也说了时间很关键,考虑将操作序列抽象为一个关于时间的排列,若第 i i i位为 0 0 0即代表这一秒没有操作,若第 i i i秒为 j j j,则代表对 j j j进行操作

考虑将某一个时刻的操作抽象成一个二进制数,每次异或这个数即为影响,但这样的时间复杂度为 2 0 20 20^{20} 2020

我们接着考虑优化,如果我们只记录相同状态的最小值就可以删去很多无用信息

那么我们结合上面的,大胆设计状态 f [ t ] [ S ] f[t][S] f[t][S]表示在 t t t秒状态为 S S S是否合法,但是如果我们考虑向序列后面加数的话,无法保证结束时间,不妨往操作序列前面加数,这样就类似枚举了一个终止时间,然后就可以转移了

时间复杂度 O ( n 2 n ) O(n2^n) O(n2n)

[吉吉没急]:B. 1031模拟赛-B吉吉没急 - 题目 - 焦作一中信息学训练题库 (code-fans.cn)

是一道转换很巧妙的题

首先考虑用 − 1 -1 1 1 1 1增加限制

先考虑 − 1 -1 1,首先用若设计 f [ x ] f[x] f[x]表示 x x x最早什么时候可以学会

那么 − 1 -1 1的点的 f [ x ] f[x] f[x]都为正无穷

如果其他点和 − 1 -1 1的点有连边的话,那么最早只能在 L + 1 L + 1 L+1的时间连边

那么如果我们发现 f [ 0 ] f[0] f[0] 0 0 0大的话说明不合法

然后用 1 1 1考虑增加限制,然后判断每一个 1 1 1是否合法

[老杰克哒]:C. 1031模拟赛-C老杰克哒 - 题目 - 焦作一中信息学训练题库 (code-fans.cn)

套路题,发现转移时线性,可以用线段树+矩阵维护

posted @ 2023-11-02 10:47  Nogtade  阅读(5)  评论(0编辑  收藏  举报  来源