Skip to content

P14364 [CSP-S 2025] 员工招聘 / employ 笔记 ​

考完这次 CSP 真正的感受到了自己的弱小,「努力」了大半年,面对正赛题解还是跟读天书一样,什么都看不懂,文化课成绩倒是步步低降了。

我该在哪里停留?我问我自己。


设最终的排列是 p1…n,[1,i) 拒绝了 bi 个人,分析一下最终的排列如何进行判定。

  • 情况 A:si=0,此时 pi 可以是任意数,对答案无影响。
  • 情况 B:si=1,但是 pi 不满意,已经跑了,即 cpi≤bi。
  • 情况 C:si=1,pi 正常参加考试,即 cpi>bi。

好像这些判定中,只有 bi 是未知的,所以是不是设 fi,j 表示 bi=j 的方案数即可?然后就会发现 bi 单调不降。前面的情况 A,C 的选择,会对后面的情况 B 产生影响,并且很难记录。

因此考虑最后再处理情况 A,C 的选择,如果只用考虑情况 A 的选择,那么只需记录 k 表示有 k 个位置不是情况 A,(n−k)! 就是情况 A 的选择。

接着是考虑情况 C 的选择,要求情况 C 全部是 cpi>bi 的方案数,等价于情况 C 任意选,减去情况 C 中有 cpi≤bi 的方案数,由于刷表法 DP 从左往右确定每一个位置,因此选择容斥,即「至少」与「恰好」的转换。

设 fi,j,k,l 表示 bi=j,且前 i 个数中有 k 个位置是情况 B,至少 l 个位置是情况 C,并且至少有这 l 个位置满足是 cpi≤bi 的情况 C。

设 cntx 表示耐心值小于等于 x 的人数。

情况 A 的转移:

fi,j,k,l→fi+1,j+1,k,l

情况 B 的转移:

fi,j,k,l×(cntj−k−l)→fi+1,j,k+1,l

情况 C,这个位置任意选的转移:

fi,j,k,l→fi+1,j,k,l

情况 C,这个位置确定满足 cpi≤bi 的转移:

−fi,j,k,l×(cntj−k−l)→fi+1,j,k,l+1

发现 k+l≤n 且可以合并,i 可以滚动数组,状态数 O(n3),转移 O(1),时间复杂度 O(n3),空间复杂度 O(n2)。

答案就是 ∑i=0n−m∑j=0nfn,i,j(n−j)!。

最近更新