Loading

[2020 Ptz WC Day5] K.To argue, or not to argue

官方题解

官方题解

如果可用座位数少于 2k2k,那么答案就是 00。设 R(j)R(j) 是有 jj 对共享一个公共边的排列数量。那么答案是

{j=0k1(availableSeats2j2)+j=1k(1)j×[Rj×(kj)×j!×r=0kj1(availableSeats2j2r2)]}×2k\left\{\sum_{j=0}^{k-1} \binom{availableSeats-2j}{2} + \sum_{j=1}^{k} (-1)^j \times \left[R_j \times \binom{k}{j} \times j! \times \sum_{r=0}^{k-j-1} \binom{availableSeats-2j-2r}{2}\right]\right\} \times 2^k

我们可以使用动态规划轻松计算 R(j)R(j) 在“破损轮廓”上。假设 m<nm < n,如果不是,就转置矩阵。给矩阵的每个单元格分配一个数字,单元格 (x,y)(x, y) 的数字是 (x1)m+y(x - 1) * m + y
dpi,j,maskdp_{i, j, mask} 是排列前 ii 个单元格的方式数量,使得 jj 对共享一个公共边,而 maskmask 是我们最后看过的 m+1m + 1 个单元格的二进制表示(如果单元格被占用,位是 00,否则是 11)。

对于所有的 jj
R(j)=mask=02m+11dpnm,j,maskR(j) = \sum_{mask=0}^{2^{m+1}-1} dp_{n*m, j, mask}

解释

问题 KK 是一个组合优化问题,涉及到在给定的座位限制下,为名人分配座位,以避免他们因为坐得相邻而发生争吵。这个问题的关键在于如何计算在没有名人对被分配到相邻座位的情况下,可能的座位分配方式的数量。

关键概念:

  1. 可用座位数:这是可以分配给名人的座位总数。
  2. 名人对数 kk:需要分配座位的名人对的数量。
  3. 共享公共边的排列 R(j)R(j):这是指在分配中,有 jj 对名人坐在相邻座位(共享一个公共边)的排列数量。

解题步骤:

  1. 检查基本条件:如果可用座位数少于 2k2k,那么无法为所有名人对分配座位,答案为 00
  2. 计算 R(j)R(j):使用动态规划计算在不同情况下(即不同的 maskmask 状态)名人对共享公共边的排列数量。
  3. 组合计算:使用组合数学公式计算总的排列方式,包括所有可能的名人对共享公共边的情况。
  4. 最终答案:通过上述计算,得到最终的座位分配方式的数量,并对结果进行模 109+710^9+7 取余。

这个问题的难点在于如何高效地计算 R(j)R(j) 以及如何将这些计算结果组合起来得到最终答案。动态规划是解决这类问题的关键工具,它允许我们将问题分解为更小的子问题,并逐步构建解决方案。

posted @ 2025-02-10 20:32  Yorg  阅读(24)  评论(0)    收藏  举报