Gravatar
lihaoze
积分:1315
提交:359 / 750

Pro3629  [LOJ β Round]ZQC 的拼图

(实际上是我比赛时的草稿,可能会有些跳跃,不过总体应该还算清晰)

$y$ 表示扩大后的长减去 $\Delta y$,$x$ 同理

下面是思路:


最小情况: 所有三角形的斜边作为向量相加为对角线(斜边为路线),则三角形最小时直角顶点为 $ (x_i, y_i) $

相似 => $\displaystyle\frac{y}{\Delta x} = \frac{a_i}{b_i}, \frac{x}{\Delta y} = \frac{b_i}{a_i} $ => $ \displaystyle{ a_i \Delta x + b_i \Delta y = k }$

故 k 的最小值大于等于左式

$ \displaystyle{ a_i \times (x_i - x_{i - 1}) + b_i \times (y_i - y_{i - 1}) \leq k }$

移项,得

$ \displaystyle{ y_i \le \frac{k - a_i \times (x_i - x_{i - 1})}{b_i} + y_{i - 1} }$

观察三角形,易得(画出来的话可能会直观一点) 

$ \displaystyle{ \frac{k}{a_i} \ge \Delta x = x_i - x_{i - 1} \\ \text{于是有} \\ x_{i - 1} \ge x_i - \frac{k}{a_i} }$

又 

$ \displaystyle{ x_i - x_{i - 1} \ge 0 } $

所以 

$ \displaystyle{ x_i \ge x_{i - 1} \ge x_i - \frac{k}{a_i} } $

接下来,由得到的这两组不等式就可以求得答案了,即枚举除定值外的 $i, x_i, x_{i - 1}, k$ 

如果因变量 $y_i$ 大于等于 $m$,就满足题目要求。

具体来说,最外面枚举 $k$,然后枚举积木,横坐标,得到 $y_n$ 的最大值,然后和 $m$ 比较,找到最小的 $k$。

根据上面的描述,不难想到状态表示:$f[i, j]$ 表示枚举到第 $i$ 个积木,横坐标枚举到 $j$ 时纵坐标的最大值,最后和 $m$ 比较的是 $f[n, m]$。

最后,只是简单的枚举其实还不能通过这一题,因为我们并不知道答案的具体取值范围,如果是 $1 \times 10^9$ 的级别,枚举一万年也算不出来,因为我们是要找最小的满足条件的 $k$(大于这个值的都满足条件),所以对于 $k$,我们用二分来找到答案。

最后的时间复杂度应该是 $O(nm^2 \log r) \ (r \text{ 取你取的二分边界})$


2022-10-24 23:49:43    
我有话要说
暂无人分享评论!