真题选做

· · 题解

P5662 [CSP-J2019] 纪念品,*绿。

CSP-J 2019 T3。

N 个物品,第 i 个物品在第 j 天的价格为 p_{i,j}。每天可以买卖任意物品。初始有 M 块钱,求 T 天后能获得的最大收益。

考虑以下两种情形是等价的:

因此,我们可以将每天分别考虑,强制第二天早上必须将所有物品卖出即可。对于第 i 天,考虑一个 dp,令 f_{j,k} 表示考虑到第 j 个物品有 k 块钱的最大收益,则:

f_{j,k}\gets f_{j-1,k+p_{i,j}}+p_{i+1,j}-p_{i,j}

同时,我们需要维护一个 q_i 表示第 i 天早上卖出所有物品后拥有的钱数,则:

q_i=\begin{cases}m,&i=1\\\max\{f_{n,k}\},&i\ne1\end{cases}

使用背包技巧,容易发现 dp 其实只用存最后一维即可。

时间复杂度 \mathcal{O}(TNM)

Code.

P5663 [CSP-J2019] 加工零件,*绿。

CSP-J 2019 T4。

n 个点 m 条边的图。q 组询问:给定 a,L,询问是否存在 1\sim a 的长为 L 的路径。

由于可以重复走某条边,显然的,若存在 1\sim a 的长为 L-2 的路径,那么一定存在长为 L 的路径。为了达到这一点,我们只需要重复走其中的某一条边即可。更进一步的,所有奇偶性相同的 L 的答案必定是相同的。

因此,我们不妨预处理出 1\sim i 的长为奇数的最短路径长度 p_i,以及 1\sim i 的长为偶数的最短路径长度 q_i。询问时:

具体实现时,可将每个点拆成 ii+n,分别表示。