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\)

  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\) 做前缀和即可。

  2. \(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\) 做前缀和即可。

  3. \(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

不是???
暴力过了???
时间只有我的 1/6 ???

UPD

赛时数据太水导致的,暴力三个 after_contest 都 T 了

posted @ 2025-07-04 10:25  陈聂  阅读(24)  评论(0)    收藏  举报