[CSP-S 2025] 员工招聘(employ)题解

[CSP-S 2025] 员工招聘(employ)题解


知识点

组合数学,容斥,计数 DP。

分析

组合计数

首先对于状态的定义,我们能够想到与大小比较有关,因为这里的大小比较一直在变化,如果能够将它装入状态,将会极大地便利我们的决策。

设状态为 \(f_{i,j,k}\),比较常规的两维 \(i,j\) 就分别是「目前面试了几个人」和「有多少人不被录取」,那么另一维 \(k\) 考虑「面试过的人中 \(c\le j\) 的人数」。

接下来转移的时候考虑一下大小比较组合计数就比较简单。

容斥

那么这个容斥可谓是非常简洁而完美的算法。

\(f_{i,j,k}\) 表示前 \(i\) 个面试者,有 \(j\) 个不被录取,\(k\) 个人被钦定了面试位置且不被录取。

辅助数组 \(cnt_i\) 表示有多少个人的 \(c\) 满足 \(\le i\)

转移也更为简单:

  1. \(s_i = 0\),一定不录取,那么先不钦定人选,因为放任何人都一样。

    \[f_{i,j-1,k} \to f_{i+1,j,k} \]

  2. \(s_i = 1\),分类讨论:令 \(x\) 为这次面试的人。

    • 录取,那么要求 \(c_x>j\),容斥为 「全部 - \([c_x\le j]\)」。

      \[f_{i,j,k} - (cnt_j - k+1)f_{i,j,k-1} \to f_{i+1,j,k} \\ \]

    • 不录取,那么要求 \(c_x\le j\)

      \[(cnt_j - k+1)f_{i,j-1,k-1} \to f_{i+1,j,k} \\ \]

答案统计是:

\[\sum_{j=0}^{n-m} \sum_{k=0}^{cnt_j} (n-k)!f_{n,j,k}\\ \]

反思

  1. 没有写特殊性质,其实这个分数还是蛮多的,\(4\) 个点。
  2. 没有细想与大小有关的状态。
posted @ 2025-11-13 14:57  Add_Catalyst  阅读(25)  评论(0)    收藏  举报