ABC 265 F - Manhattan Cafe
F - Manhattan Cafe
题解
首先每一维的贡献是独立的,因此这是一个多重背包问题。
设 \(ways_{i, d0, d1}\) 表示前 \(i\) 维,\(p\), \(q\), 分别消耗 \(d0\), \(d1\)。
转移是 \(ways_{i, d0, d1} \rightarrow ways_{i+1, d0 + |p_{i+1} - pos|, d1 + |q_{i+1} - pos|}\)
其中 \(pos\) 是你选择的 \(i+1\) 维的位置。这里每个状态对应的转移数量是 \(O(D)\) 的。
绝对值实质是几个简单函数限制值域合在一起,因此我们拆开来。设 \(|p_i - q_i| = L\), 那么到 \(p\) 的距离 \(d_p\) 和到 \(q\) 的距离 \(d_q\) 是满足以下条件的任意数
\(d_p \ge 0 \land d_q \ge 0 \land (d_p + d_q = L \lor d_p - d_q = L \lor d_q - d_p = 0)\)
考虑从 \(i\) 转移到 \(i+1\)
-
\(d_p + d_q = L \land d_p \ge 0 \land d_q \ge 0\)
后两者等价于 \(0 \le d_p \le L\)。因此 \(ways_{i, d0, d1}\) 可以转移到 \(ways_{i+1, d0+d_p, d_1+L-d_p}\)。(不一定保证后两者都不超过 D)
转移到的状态的 \(d0' + d1' = d0 + d1 + L\)。我们可以统一处理 \(d0 + d1\) 相同的这些状态。这些状态转移到的 \(d0' \in [d0, d0 + L]\)。对每个 \(sum = d0 + d1\) 做前缀和即可。
-
\(d_p - d_q = L \land d_p \ge 0 \land d_q \ge 0\)
转移到的状态的 \(d0' - d1' = d0 - d1 + L\)。我们可以统一处理 \(d0 - d1\) 相同的这些状态。这些状态转移到的 \(d0' \in [d0, +\infty)\)。对每个 \(diff = d0 - d1\) 做前缀和即可。
-
\(d_p - d_q = -L \land d_p \ge 0 \land d_q \ge 0\)
转移到的状态的 \(d0' - d1' = d0 - d1 - L\)。我们可以统一处理 \(d0 - d1\) 相同的这些状态。这些状态转移到的 \(d0' \in [d0, +\infty)\)。对每个 \(diff = d0 - d1\) 做前缀和即可。
tip : 如何对转移是一次函数的 dp 做前缀和
(即:\(dp_{a, b} \rightarrow dp_{a + x, b + y}\),其中 \(y = px+q\))
找到不变量。 \(p(a') - b' = p(a + x) - b - (px + q) = pa - b - q\)
因此统一处理 \(pa - b\) 相同的状态。通过题目限制找到 \(x\) 的范围,然后做前缀和即可。
UPD
UPD
赛时数据太水导致的,暴力三个 after_contest 都 T 了
浙公网安备 33010602011771号