CSP-S T4 员工招聘/employ

T4

A. 简化题目:给定 \(s_i\) :定义与原题一致,求至少 \(m\) 个人通过的方案数。

B. 做法:

\(\alpha\) 考虑二维dp:

\(\text{dp}_{ij}\) 表示前 \(i\) 个人中,有 \(j\) 个人通过的方案数

\[\text{dp}_{ij} = \text{dp}_{i-1, j-1} \times (n - i + 1) \times i!, \ \text{if} \ s_i = 1\\ \ \ \ \ \ \ \text{dp}_{i-1,j}\times (n-i+!)\times i!, \ \text{if } s_i = 0 \]

但明显这是错的(一道上位紫的dp怎么可能这么简单)

不妨考虑再改一下

\(\text{dp}_{ij}\) 表示前 \(i\) 个人中,有 \(j\) 个人失败的方案数。

考虑转移:

但此时,我们发现仅知道 \(i\)\(j\) 时, \(c_x > j\)\(c_x \le j\) 的人数是未知的

那就考虑加维

\(\beta\) 考虑三维dp:

经过上面的失败,我们发现 \(c_x > j\)\(c_x \le j\) 的人数是要设进dp的状态转移方程中的

而这二者仅需知道一个就可求出另一个

\(\text{dp}_{ijk}\) 表示前 \(i\) 个人中,有 \(j\) 个人失败了,且在这 \(i\) 个人中,有 \(k\) 个人是 \(c_x > j\)

[此时,\(c_x \le j\) 的人数是 \(i - k\)]

cnt[i]\(c_x = i\) 的人数,pre[i]cnt 的前缀和

! 注意一点:

\(\text{dp}_{ijk} \larr \text{dp}_{i + \Delta_1, j+ \Delta_2, k+ \Delta_3}\)

\(s_i = 1\)

a. 选了 \(c_x > j\) 时:

\[\text{dp}_{ijk} \larr \text{dp}_{i - 1, j, k-1} \]

b. otherwise

ans[i] 为前 \(i - 1\) 步的答案,cnt[i] 为第 \(i\) 次的种数

ans[i] = \(\text{dp}_{i-1,j-1,k+t} \times {\text{cnt}_j \choose t}{k+t \choose t} t!\)

cnt[i] = \(\text{pre}_{j-1} - (i - k - t - 1)\)

则:

\[\text{dp}_{ijk} \larr \text{ans}[i] \times \text{cnt}[i] \]

\(s_i = 0\)

首先,考虑上一次的转移,此时是 \(i,\ j,\ k\) ,那上一次是 \(i-1,j-1,k+\Delta\)

a. \(c_x > j\) 时:

\(i\) 次之后共 \(k\)\(c_x > j\)

\(i - 1\) 次选择后 使用了 \(k + \Delta = k + t - 1\)\(c_x > j\)

\[\text{dp}_{ijk} \larr \text{dp}_{i-1,j-1,k+\Delta} \times {k + t - 1 \choose t}{\text{cnt}_j \choose t}t! \]

b. \(c_x \le j\) 时:

\[\text{dp}_{ijk} \larr \text{dp}_{i-1,j-1,k+t}\times{k + t\choose t} {\text{cnt}_j \choose t}t! \]

posted @ 2025-11-08 14:29  Yangyihao  阅读(4)  评论(0)    收藏  举报