1. 题目链接
Kickstart Round G 2019 C. Shifts
2. 题目描述
Aninda 和 Boon-Nam是一个小型美术馆的保安。他们的工作包括 $N$ 个班次 $(1\le N\le 20)$。在每个班次中,两个警卫中的至少一个必须工作。
两位后卫对每个班次都有不同的偏好。对于第 $i$ 个班次,如果 Aninda 工作,她将获得 $A_i$ 幸福点,而如果 Boon-Nam 工作,她将获得 $B_i$ 幸福点。
如果两个警卫都获得至少 $H$ 个快乐点,他们将感到高兴。守卫会感到高兴的班次有几种不同的分配方式?
如果 Aninda 在一个作业中工作而不是另一工作,或者 Boon-Nam 在一个作业中工作而在另一工作中不工作,则认为两个作业是不同的。
3. 解题思路
3.1 中途相遇+线段树
把 $N$ 天等分成 前 $\frac{N}{2}$ 天、后 $(N-\frac{N}{2})$ 天。然后分别枚举前 $\frac{N}{2}$ 天、后 $(N-\frac{N}{2})$ 天的所有可能的组合,并对每种组合计算 Aninda 和 Boon-Nam 的幸福分数。
然后对于每个后$(N-\frac{N}{2})$ 天中的 $(\mathrm{right}_A, \mathrm{right}_B)$ ,我们计算前 $\frac{N}{2}$ 天的幸福点对 $(\mathrm{left}_A, \mathrm{left}_B)$的个数,其中 $\mathrm{left}_A\ge (H-\mathrm{right}_A)$,$\mathrm{left}_B\ge (H-\mathrm{right}_B)$。
我们对前 $\frac{N}{2}$ 天、后 $(N-\frac{N}{2})$ 天的幸福点对都进行一次升序排序,先排序第一维,再排序第二维。
然后,从小打大枚举排序后的后 $(N-\frac{N}{2})$ 天的幸福点对。对于每个后$(N-\frac{N}{2})$ 天中的 $(\mathrm{right}_A, \mathrm{right}_B)$ ,找到所有第一维符合 $\mathrm{left}_A\ge (H-\mathrm{left}_B)$ 的幸福点对,将改点对的 第二维 $\mathrm{right}_A$ 插入到线段树中。然后统计线段树中,第二维的幸福值在 $[H-\mathrm{left}_B, +\infty)$ 区间的个数(线段树的单点更新,区间查询)。
复杂度是 $\mathcal{O}(\frac{N}{2}\times 3^{\frac{N}{2}})$。
3.2 暴力枚举+剪枝
先枚举 $A$,再枚举 $B$,复杂度可以达到 $\mathcal{O}(2^{\frac{3N}{2}})$。
也可以直接枚举所有组合,复杂度可以达到$\mathcal{O}(3^N)$。
加几个剪枝,也许就过了。
4. 参考代码
1 | // 3.1 中途相遇+线段树 |
1 | // 暴力枚举+剪枝 |