传送门

题意:NNN种物品,每次第iii种产生概率为piM\frac{p_i}{M}Mpi​​,∑pi=M\sum p_i=M∑pi​=M。求生成KKK种不同物品的期望时间 模998244353998244353998244353

N≤1000,M≤10000,N−K≤10N \leq1000,M \leq 10000,N-K\leq10N≤1000,M≤10000,N−K≤10

又是神仙题……

套路性地把每个物品出现的时间丢到一个集合SSS里面,我们要求的是集合第N−K+1N-K+1N−K+1大

而最小是随便求的

所以魔改一下Min-Max容斥

假设存在f(x)f(x)f(x)满足

max⁡k(S)=∑T⊆Sf(∣T∣)min⁡(T)\max_k(S)=\sum_{T \subseteq S}f(|T|)\min(T)kmax​(S)=T⊆S∑​f(∣T∣)min(T)

考虑第m+1m+1m+1大的数产生的贡献

∑i=0mCmif(i+1)\sum_{i=0}^m C_m^if(i+1)i=0∑m​Cmi​f(i+1)

我们希望第kkk大的数贡献一次 即

[m=k−1]=∑i=0mCmif(i+1)[m=k-1]=\sum_{i=0}^m C_m^if(i+1)[m=k−1]=i=0∑m​Cmi​f(i+1)

二项式反演一波

F(m)=[m=k−1],G(i)=f(i+1)F(m)=[m=k-1],G(i)=f(i+1)F(m)=[m=k−1],G(i)=f(i+1)

F(m)=∑i=0mCmiG(i)F(m)=\sum_{i=0}^mC_m^iG(i)F(m)=i=0∑m​Cmi​G(i)

G(m)=∑i=0m(−1)m−iCmiF(i)G(m)=\sum_{i=0}^m(-1)^{m-i}C_m^iF(i)G(m)=i=0∑m​(−1)m−iCmi​F(i)

f(m+1)=(−1)m−k+1Cmk−1f(m+1)=(-1)^{m-k+1}C_m^{k-1}f(m+1)=(−1)m−k+1Cmk−1​

f(m)=(−1)m−kCm−1k−1f(m)=(-1)^{m-k}C_{m-1}^{k-1}f(m)=(−1)m−kCm−1k−1​

所以

max⁡k(S)=∑T⊆S(−1)∣T∣−kC∣T∣−1k−1min⁡(T)\max_k(S)=\sum_{T \subseteq S}(-1)^{|T|-k}C_{|T|-1}^{k-1}\min(T)kmax​(S)=T⊆S∑​(−1)∣T∣−kC∣T∣−1k−1​min(T)

当然是期望下的

子集最小可以随便求,所以考虑前面那坨怎么搞

考虑dp

定义状态dp(i,j,k)dp(i,j,k)dp(i,j,k)表示从前iii个物品选出ppp的和为jjj作为TTT的(−1)∣T∣−kC∣T∣−1k−1(-1)^{|T|-k}C_{|T|-1}^{k-1}(−1)∣T∣−kC∣T∣−1k−1​的和

考虑转移

不选当前点 即dp(i−1,j,k)dp(i-1,j,k)dp(i−1,j,k)

选当前点 即

∑i∈T(−1)∣T∣−kC∣T∣−1k−1\sum_{i\in T}(-1)^{|T|-k}C_{|T|-1}^{k-1}i∈T∑​(−1)∣T∣−kC∣T∣−1k−1​

把iii丢掉

∑T(−1)∣T∣−k+1C∣T∣k−1\sum_T(-1)^{|T|-k+1}C_{|T|}^{k-1}T∑​(−1)∣T∣−k+1C∣T∣k−1​

注意此时的TTT在前i−1i-1i−1个中选

由于前后的TTT不统一,无法转移,所以……拆组合数

∑T(−1)∣T∣−k+1C∣T∣−1k−1+∑T(−1)∣T∣−k+1C∣T∣−1k−2\sum_T(-1)^{|T|-k+1}C_{|T|-1}^{k-1}+\sum_T(-1)^{|T|-k+1}C_{|T|-1}^{k-2}T∑​(−1)∣T∣−k+1C∣T∣−1k−1​+T∑​(−1)∣T∣−k+1C∣T∣−1k−2​

−∑T(−1)∣T∣−kC∣T∣−1k−1+∑T(−1)∣T∣−k+1C∣T∣−1k−2-\sum_T(-1)^{|T|-k}C_{|T|-1}^{k-1}+\sum_T(-1)^{|T|-k+1}C_{|T|-1}^{k-2}−T∑​(−1)∣T∣−kC∣T∣−1k−1​+T∑​(−1)∣T∣−k+1C∣T∣−1k−2​

再次强调是前i−1i-1i−1个中选的

所以就是

dp(i,j,k)=dp(i−1,j,k)+dp(i−1,j−pi,k−1)−dp(i−1,j−pi,k)dp(i,j,k)=dp(i-1,j,k)+dp(i-1,j-p_i,k-1)-dp(i-1,j-p_i,k)dp(i,j,k)=dp(i−1,j,k)+dp(i−1,j−pi​,k−1)−dp(i−1,j−pi​,k)

然而还有个让人头大的边界问题

当j<pij<p_ij<pi​也就是不能选当前点 dp(i,j,k)=dp(i−1,j,k)dp(i,j,k)=dp(i-1,j,k)dp(i,j,k)=dp(i−1,j,k)

当j=pij=p_ij=pi​

如果要选就是从空集转移过来,但空集代进去超过了人类的认知,所以直接用定义算

显然就是∣T∣=1|T|=1∣T∣=1

即(−1)1−kC0k−1=[k=1](-1)^{1-k}C_0^{k-1}=[k=1](−1)1−kC0k−1​=[k=1]

所以dp(i,j,k)=dp(i−1,j,k)+[k=1]dp(i,j,k)=dp(i-1,j,k)+[k=1]dp(i,j,k)=dp(i−1,j,k)+[k=1]

j>pij>p_ij>pi​正常转移

滚动数组优化一下即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
const int MOD=998244353;
typedef long long ll;
int p[1005],dp[2][10005][15];
inline int qpow(int a,int p)
{int ans=1;while (p){if (p&1) ans=(ll)ans*a%MOD;a=(ll)a*a%MOD;p>>=1;}return ans;
}
#define inv(x) qpow(x,MOD-2)
int main()
{int N,K,M;scanf("%d%d%d",&N,&K,&M);K=N-K+1;for (int i=1;i<=N;i++) scanf("%d",&p[i]);int cur=1;for (int i=1;i<=N;i++){for (int j=0;j<p[i];j++)for (int k=1;k<=K;k++)dp[cur][j][k]=dp[cur^1][j][k];for (int k=1;k<=K;k++) dp[cur][p[i]][k]=dp[cur^1][p[i]][k]+(k==1);for (int j=p[i]+1;j<=M;j++)for (int k=1;k<=K;k++)dp[cur][j][k]=((ll)dp[cur^1][j][k]+dp[cur^1][j-p[i]][k-1]-dp[cur^1][j-p[i]][k]+MOD)%MOD;cur^=1;}int ans=0;for (int i=1;i<=M;i++) ans=(ans+(ll)dp[N&1][i][K]*M%MOD*inv(i)%MOD)%MOD;printf("%d",(ans+MOD)%MOD);return 0;
}

【洛谷P4707】重返现世【扩展Min-Max容斥】【dp】相关推荐

  1. 洛谷 P4707 重返现世

    洛谷 P4707 重返现世 k-minimax容斥 有这一个式子:\(E(\max_k(S))=\sum_{T\subseteq S}(-1)^{|T|-k}C_{|T|-1}^{k-1}\min(T ...

  2. 洛谷P4707 重返现世(扩展MinMax容斥+dp)

    传送门 我永远讨厌\(dp.jpg\) 前置姿势 扩展\(Min-Max\)容斥 题解 看纳尔博客去→_→ 咱现在还没搞懂为啥初值要设为\(-1\)-- //minamoto #include< ...

  3. [洛谷P4707] 重返现世

    Description 为了打开返回现世的大门,\(Yopilla\) 需要制作开启大门的钥匙.\(Yopilla\) 所在的迷失大陆有 \(n\) 种原料,只需要集齐任意 \(k\) 种,就可以开始 ...

  4. [洛谷P4707]重返现世

    Description 有n种物品,每次操作你有pimpi\over mmpi​的概率获得第i种物品 求你获得k种物品的期望操作数. n<=1000,n-k<=10,m<=10000 ...

  5. P3175 [HAOI2015]按位或(Min - Max容斥,FMT,概率期望,全网最清晰的题解!)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P3175 Prob ...

  6. P4707 重返现世 扩展 MinMax 容斥+DP

    题目传送门 https://www.luogu.org/problem/P4707 题解 很容易想到这是一个 MinMax 容斥的题目. 设每一个物品被收集的时间为 \(t_i\),那么集齐 \(k\ ...

  7. 【题解】P4707 重返现世

    [题解]P4707 重返现世 P4707 重返现世 期望下Min-Max容斥DP E(kthmax(T))=∑T⊂S(−1)∣T∣−kC∣T∣−1k−1E(min⁡(S))E(kthmax(T)) = ...

  8. *【洛谷 - P1025】数的划分(dfs 或 dp 或 母函数,第二类斯特林数Stirling)

    题干: 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5 1,5,1 5,1,1 问有多少种不同的分法. ...

  9. 【洛谷P4707】重返现世(Min-Max容斥)(背包)

    传送门 题解: 首先令k=n−k+1k=n-k+1k=n−k+1,转化为求第kkk大. 直接利用Kth−MinMaxKth-MinMaxKth−MinMax容斥的式子我们知道要求这个东西: E(kth ...

最新文章

  1. Go 学习笔记(12)— 字典map定义、初始化、读取字典、删除字典、清空字典、map 按 key 进行有序遍历
  2. a_10在C语言的,在C语言中,能正确表示逻辑关系:a≥10或a≤-10的C语言表达式是...
  3. CentOS 7 + nginx-1.12 + php-7.2 + MySQL-5.7
  4. 万兆以太网测试仪应该具备的测试功能
  5. Xamarin.Forms 5.0 项目实战发布!
  6. vscode终端无法识别node
  7. Python3.x Numpy中的array数组_矩阵操作
  8. python地址多少位_Python获取IP地址对应的地理位置信息!
  9. 后台填充_单元格噩梦终于有救?500多行隔行填充,我就两步!
  10. ccf中文期刊目录_37本!中国计算机学会CCF首次发布推荐中文科技期刊目录
  11. 【CCF - 202009-1】称检测点查询 c语言
  12. 620集成显卡和mx250,轻薄本的新独显!MX250现身英伟达官网,核显3.5倍性能
  13. 学习感悟(人脸识别)
  14. 史上最全最详细的PS3模拟器安装及设置教程
  15. 用sync toy做增量备份
  16. imx6上调用 vpu
  17. 天津春考计算机学什么,2016天津春季高考计算机基础科目考试大纲
  18. Matlab 图片转gif
  19. 包管理工具 —— 更推荐的 pnpm
  20. 计算机怎么搜索程序和文件格式,「闪电搜索」一款电脑必备的搜索文件软件,还有Everything...

热门文章

  1. vue 日期格式化返回指定个数月份_vue过滤器实现日期格式化的案例分析
  2. 物理学家杨振宁到底有多厉害?
  3. 如何逃离「信息茧房」?
  4. TensorFlow框架的这些操作你肯定不知道!
  5. python赋值语句格式_Python赋值语句后逗号的作用分析
  6. python第k序列元素查找_Python寻找第k小的元素
  7. fabric 转账_Fabric 学习笔记-架构初探
  8. 苹果白屏一直显示苹果_最新消息显示:苹果还要发新品
  9. linux命令查询邮件发送状态,Linux发邮件之mail命令详解
  10. python分布式爬虫及数据存储_二十一 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存...