[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\)。
转移也更为简单:
-
\(s_i = 0\),一定不录取,那么先不钦定人选,因为放任何人都一样。
\[f_{i,j-1,k} \to f_{i+1,j,k} \] -
\(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}\\
\]
反思
- 没有写特殊性质,其实这个分数还是蛮多的,\(4\) 个点。
- 没有细想与大小有关的状态。

浙公网安备 33010602011771号