尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

[CSP-S 2025] 员工招聘 / employ

[CSP-S 2025] 员工招聘 / employ
📅 发布时间:2026/6/20 0:45:35

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

先初步分析一下录取的条件:

  • \(s_i=0\) 此时一定不会被录取
  • \(s_i=1\) 记之前被淘汰的人数为 \(j\),则若 \(c_{p_i}>j\) 则会被录取,\(c_{p_i}\le j\) 不会被录取。

考虑一个从前往后的 \(\mathrm{dp}\),\(f_{i,j}\) 表示填好了 \(p_{1\sim i}\),且有 \(j\) 个人被淘汰的方案数。但是这样需要考虑前面被用掉的 \(c\) 对后面的影响。

贡献延后计算

考虑再记一维,\(f_{i,j,k}\) 表示填好了 \(p_{1\sim i}\),且有 \(j\) 个人被淘汰的方案数此时有 \(k\) 个位置满足 \(c_{p_i}>j\)。转移较为复杂,记 \(cnt_j\) 表示 \(c_i=j\) 的个数,\(s_j\) 表示 \(c_i\le j\) 的个数,转移时分类讨论:

  • 这个人来面试 \((c_{p_i}>j)\)

    • \(s_i=1\)。 录取 \(p_i\),那么需要满足 \(c_{p_i}>j\),但是我们并不知道具体方案数,考虑将贡献延后计算,在 \(j\) 往后不断增加的过程中,我们在 \(c_{p_i}=j+1\) 的位置计算上当前位置的放置方案数,即先不算上放上这个位的方案数,得到 \(f_{i+1,j,k+1}\leftarrow f_{i,j,k}\)。

    • \(s_i=0\)。无法录取 \(p_i\),应当转移到 \((j+1,k+1)\),不过别忘了要算上之前 \(c_{p_i}=j+1\) 的位置,枚举有 \(\ell\) 个位置等于 \(j+1\),将这些位置分配给 \(k+1\) 个位置,方案数 \(\binom{k+1}{\ell}\),选出这些位置有 \(\binom{cnt_{j+1}}{\ell}\) 种选法,分配完之后这些数可以乱排,因此最终得到转移:

      \[f_{i+1,j,k+1-\ell}\leftarrow \binom{k+1}{\ell}\binom{cnt_{j+1}}{\ell}\ell!\times f_{i,j,k} \]

  • 这个人不来面试 \((c_{p_i}\le j)\)

    这个人一定不会被录取,贡献到 \((j+1,k)\),需要算上当前位的 \(p_i\) 方案数,总共有 \(s_j\) 种选择,但是之前已经有 \((i-k)\) 个被选过了,因此当前位方案数为 \([s_j-(i-k)]\)。同时要类似算上 \(c_{p_i}=j+1\) 的贡献:

    \[f_{i+1,j+1,k-\ell}\leftarrow [s_j-(i-k)]\binom{k}{\ell}\binom{cnt_{j+1}}{\ell}\ell!\times f_{i,j,k} \]

考虑答案的计算,到 \(f_n\) 处所有的位置都放好了,直接枚举有 \(j\) 个人寄掉即可,那么自然 \(c_{p_i}>j\) 的位置就有 \(k=n-s_j\) 个,但是由于贡献延后计算的影响,这些位置还没有计算乱排的方案,于是答案为

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

分析一下时间复杂度,看似是 \(O(n^4)\) 的,但是其实每次枚举的 \(\ell\le cnt_j\),其和是 \(O(n)\) 的,因此总时间复杂度是 \(O(n^3)\) 的,常数较大,不过可以通过。

容斥

上述贡献延后计算的做法太繁琐复杂,我们将重心从排列本身转到最终每个人的状态上,显然我们最后只是关注有多少个人面试成功了,因此可以枚举最终面试的状态 \(a\),\(a_i=0/1\) 表示 \(p_i\) 是否面试成功。则我们可以对每个 \(a\) 计算出满足的排列 \(p\) 的数量。考虑令 \(f_{i,j,k}\) 表示填好了 \(a_{1\sim i}\),有 \(j\) 个人面试失败,且钦定有 \(k\) 个位置已固定时计算上的贡献。转移依旧分类讨论:

  • \(s_i=0\)。 此时一定 \(a_i=0\):\(f_{i+1,j+1,k}\leftarrow f_{i,j,k}\)。

  • \(s_i=1\)。

    • 令 \(a_i=0\)。\(f_{i+1,j+1,k+1}\leftarrow f_{i,j,k}\times (s_j-k)\)。

    • 令 \(a_i=1\)。此处需要计算 \(c_{p_i}>j\) 的方案数,这个不好算,但是我们可以容斥,用总方案数减去存在 \([c_{p_i}\le j]\) 的方案数。总方案数就是不对此处做出钦定,\(f_{i+1,j,k}\leftarrow f_{i,j,k}\)。

      容斥掉钦定 \([c_{p_i}\le j]\) 的方案数,得到 \(f_{i+1,j,k+1}\leftarrow -f_{i,j,k}\times (s_j-k)\)。

最后是答案的计算,枚举 \(j\le n-m,k\),由于有 \(k\) 个位置已经固定,剩下的可以任意排列,方案数为 \((n-k)!\),因此不难得到答案为:

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

时间复杂度 \(O(n^3)\),非常简洁。

相关新闻

  • 题解:uoj632【UR #21】挑战最大团
  • 2025上海商铺办公室装修公司推荐指南:业态适配与TOP10实力榜
  • Hier-SLAM++ (2) MeshGPT:仅使用解码器Transformer生成三角形网格 - MKT

最新新闻

  • GitHub AI热榜实操解码:从星标数到可运行代码的落地指南
  • 端午静听雨
  • 宁波生成式引擎GEO优化服务商技术实力对比分析 - 起跑123
  • RePKG完全指南:三步解锁Wallpaper Engine资源的终极工具
  • XOutput终极指南:让老旧游戏手柄在现代游戏中焕发新生
  • 天堂寨性价比高好吃吊锅推荐 本地食客实测优选榜单 - 速递信息

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号