[ABC374F] Shipping 讲解

· · 题解

[ABC374F] Shipping

题目考察:离散化,dp。
题目简述:
给你序列 \{s_n\} 和两个正整数 x,k,求序列 \{p_n\},\{t_n\} 满足:

使得 \displaystyle\sum_{i=1}^nt_i-s_i 最小,求这个值。
数据范围:

首先,p 序列的顺序是不影响答案的。

因为 \displaystyle\sum_{i=1}^nt_i-s_i=\sum_{i=1}^nt_i-\sum_{i=1}^ns_i,顺序不影响 s,t 的和。

然后我们发现 t_i 只可能是两种值(1\le pos\le n):

那么我们将时间节点变成所有的 s_i+jx1\le i,j\le n),有效的时间变成了 \Theta(n^2) 个。

我们这样就可以 dp 了,将有效的时间离散化(设为序列 a),设 f_{i,j} 表示在第 i 位上,且上一个 t_{pos}jt 的和的最小值。

$\max(a_j+x,s_{pos_i})$ 是 $t_{pos}$ 应该设的值,应该设 $pos_i-i$ 个。这样的话我们就可用 $f_{pos_i,pos_j}=\min(f_{pos_i,pos_j},f_{i,j}+\max(a_j+x,s_{pos_i})\times(pos_i-i))$ 这个式子来转移了。 时间复杂度因为实现细节可能是 $\Theta(n^3k)$ 或 $\Theta(n^3k\log n^2)$。 [代码](https://www.luogu.com.cn/record/180434492)