专栏文章

P14364 [CSP-S 2025] 员工招聘 / employ(官方数据)(学习笔记)

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min90sid
此快照首次捕获于
2025/12/01 22:32
3 个月前
此快照最后确认于
2025/12/01 22:32
3 个月前
查看原文
首先考虑m=1的情况
答案为n!(一个都不录取的情况数)n!-(一个都不录取的情况数)
所以对于每一个si=1s_i=1 均有 ci<=i1c_i<=i-1
限制是单调增的,所以可以从前往后一次满足
sumisum_i 表示 c<=ic<=i 的数量
答案为 n!(nk)!(sumi1(i1))n! - (n-k)!*\prod(sum_{i-1} - (i-1) )
推广至m不为1的情况
在k个s等于1的位置中,我们需要选出一个集合S(不满足的数量),使得
  1. S<=km|S|<=k-m
  2. 对于iS,ci<=ti(前面放弃的)i\in S ,c_i<=t_i(前面放弃的)
  3. 对于不属于S且s为1的情况,ci>tic_i>t_i
  4. 剩下任意放
同时有大于和小于,考虑容斥
选出集合T,TS=T\cap S= \emptyset
暴力枚举为O(3n)O(3^n) ,考虑用dp转移
fi,j,kf_{i,j,k} 表示前i个s=1的点中,j个属于S,k个属于T wiw_i 表示i前面s为0的点 转移为:
CPP
f[i+1][j][k]+=f[i][j][k];//没有任何限制
f[i+1][j+1][k]+=f[i][j][k]*(sum[w[i+1]+j]-j-k);//不符合要求
f[i+1][j][k+1]+=f[i][j][k]*(sum[w[i+1]+j]-j-k);//容斥
答案为
fi,j,k(njk)!(1)k f_{i,j,k}*(n-j-k)!*(-1)^{k}

评论

0 条评论,欢迎与作者交流。

正在加载评论...