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! \]

浙公网安备 33010602011771号