1 月做题记录

一点动态规划:
[ABC339E] Smooth Subsequence
dp 式子是可以看出来的。设
于是式子可以列出来:
直接用这个鬼玩意的复杂度是
于是开始优化:这里使用线段树优化。创建一个值域线段树。对于值域线段树的位置
时间复杂度
Double Exp: Flat Subsequence
[ABC353G] Merchant Takahashi
Tips:最开始高桥的初始位置为村庄
设 memset
dp 序列为负无穷,
然后得出 dp 转移式子:
直接用这个鬼玩意的复杂度是
于是开始优化:这个绝对值是非常烦的鬼玩意,于是我们将绝对值拆开:
于是我们可以将其转移到线段树上。节点
然后每次查询的时候就查
最后答案还是整个
Linear Kingdom Races
这道题是一种新的设 DP 状态的一道基础题。
跟 THUWC 2025 D1T1 比较像(给我气笑了(╬▔皿▔)╯)。
还是先设 dp 状态。设
于是可以得出下列转移式子:
第一项就是修 光吉猛修。
直接用这个鬼玩意的复杂度是
于是考虑优化:还是把它搬到线段树上。每一个线段树节点
然后就和平常的线段树优化一样搞就可以了。时间复杂度
P9871 [NOIP2023] 天天爱打卡
这道题是上一道题的升级版。就是加了一个
Intervals
设
于是可以得出:
直接用这个鬼玩意的复杂度是
于是考虑优化:建一个线段树,线段树的每一个节点
时间复杂度
[AGC044E] Random Pawn
学长讲题一则。
题目描述的不是很清楚,我在这里重新描述一下:
有一个长为
继续走其他点,你会随机到达这个位置的相邻的两个位置的其中一个。你会花费
的代价。 在该点停止,并且获得该点的权值
,游戏结束。
求最大的期望价值。
首先我们设在点
一个环上是不好搞的,于是我们要先拆环为链。
又因为,在这道题很容易发现的、如果一个位置它的值是这个序列最大的,那么我们也就没必要跳到其他点去得到更小的值。
于是我们就设这条链的两端就为这个最大值,再以这个最大值为开头重新排列。于是把长为
为了更好的描述,下面把
于是就可以得到:
我们发现后面的那一坨
设
于是原式就变为了:
然后为了消掉这个烦人的
于是我们随便设
于是就变为了:
发现
每一个
现在,
具体地、
最开始有两个点,
现在,第二个点
然后第三个点
第四个点
最后,我们发现,这玩意其实就是一个凸包。我们就求凸包推出
[ABC389E] Square Price
ABC 389。这场我打了 1147 名。恶臭,E 题比 F 题难。
因为购买
那么我们就可以贪心选了。在这
但是暴力做是可以构造一组价格全是
我们枚举我们能买到的最大价格
于是这道题就做完了。
[ABC389F] Rated Range
原神题。
有了数据结构,就不需要脑子了!
因为值域是在
因为不管举行多少次,不管加分的 Rating 范围是多少,最终的序列一定是单调的。于是我们就可以线段树二分找到要修改的最小下标和最大下标。然后区间加。最后查询的时候就查线段树上的叶子节点就行了。
所以这道题其实是线段树上二分板子题。然后就做完了。
P4159 [SCOI2009] 迷路
这道题如果没有边权,那么这道题就是邻接矩阵快速幂板子。但是现在有边权。
于是因为边长在
然后初始时
当我们要连边
快速幂复杂度
Power of Matrix
这道题让我们求
当
为偶数的时候,那么设 ,那么原式就为 。 当
为奇数的时候,那么设 ,原式就为 。
然后就可以分治做了。
P2886 [USACO07NOV] Cow Relays G
离散化后的邻接矩阵快速幂。
但是这里使用的是 Floyd 算法,所以要将乘号重定义。
The Battle of Chibi
这道题还是 dp。
设
初始状态设
直接用这个鬼玩意的复杂度是
于是开始优化:可以用树状数组优化。因为求的是前缀和。但是值域太大,需要先离散化。
时间复杂度
P2605 [ZJOI2010] 基站选址
这道题依然是一道 dp。
开始设状态:设
直接用这个鬼玩意的复杂度是
于是考虑优化:我们首先求出对于村庄
然后当
具体地、首先将上一个
而当
P3287 [SCOI2014] 方伯伯的玉米田
这道题也是一道 dp。用人话来说,就是可以执行最多
我们还是先设 dp 状态:设
我们能发现一个性质:就是你要拔高一个区间,那么拔
然后就可以得出 dp 转移式:
(不用考虑是不是不连续了,因为反正中间的那些你都不管,那么根据之前的性质,就让它加上
但是,直接用这个鬼玩意的复杂度是
于是考虑优化:我们可以看到转移式是个
于是这道题就做出来了,时间复杂度
Codeforces 2063-D
这道题赛时想到了思路,但是因为时间不够没有调出来。然后掉到了 1800 多名去了(Codeforces Round 1000)。Yee tour fen.
容易发现,选线段肯定是选最两边的,选点肯定是选最中间的。这样是最优的。那么我们首先给点排序(题目里没说序列有序!!),然后就可以开始贪心选:每次选线段就比较一下
但是这个时候,你会遇到在
那么边界
那么就可以列出不等式:
联立可得
又因为两侧选点的极限是
于是这道题就做完了。
AT_dp_s Digit Sum
从这里开始似乎就都是 AT_dp 比赛的题了。
这道题一眼数位 dp。
首先设状态:设
AT_dp_t Permutation
这道题的 DP 状态比较巧妙。
设
为什么这么设状态呢?因为其实这些大于号小于号是用来限制它们的相对大小关系的。只要相对大小关系对了,怎么填都可以。
于是我们就可以轻松得出式子:
直接用这个鬼玩意的复杂度是
于是考虑优化:这道题的优化是最简单的。直接前缀和优化即可。时间复杂度
三倍 EXP:UVA1650 Number String,P2467 地精部落
AT_dp_u Grouping
这道题可以想到一个非常简单的 dp:假设
(初始设
但是不好枚举,然后转化一下:
这样是好枚举的。
直接用这个鬼玩意的理论复杂度是初始化
但是运行了 1.3s,还是要考虑优化:这个 DP 非常浪费的一个地方就是枚举了非常多的不包含于
有一个方法:因为这里的集合使用一个二进制数表示的,所以可以先从 (T-1) & S
。这种方法可以完美的枚举所有
时间复杂度预处理
证明枚举子集的复杂度为
AT_dp_v Subtree
这道题就是在树上做 dp。(感觉说了和没说一样
因为这是一棵无根树,所以就先钦定节点 1 为根。然后设状态。又因为是在强制把这个节点染成黑色的情况,所以连通要么黑色点连在下面,要么连在上面。而因为遍历一棵树最常用的方法是 DFS,所以我们把 dp 状态分成两个:
:设其为当黑色点全在以 为根的子树内(包含点 )的方案数。 :设其为当黑色点全在以 为根的子树外(也包含点 )的方案数。
然后总答案就是
那我们该如何求呢?首先,对于
而对于
AT_dp_x Tower
我们可以想到一个朴素的算法:先定一个
但是遇到了一个问题:如何确定放箱子的顺序使最终答案最优?
不容易想到(我看了 tj),现在有两个箱子
- 若
在 上面,那么还可以放 的重量在 上。 - 若
在 上面,那么还可以放 的重量在 上。
这样就好理解了,哪个的剩余重量大就选哪种情况。所以将
于是在开头的 init
部分排序排一下优先级,就做出来了。
AT_dp_z Frog 3
- Title: 1 月做题记录
- Author: 11490DX
- Created at : 2025-01-22 08:44:05
- Updated at : 2025-03-07 21:01:41
- Link: https://11490dx.net/2025/01/22/R701-practice-log/
- License: This work is licensed under CC BY-NC-SA 4.0.