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

传送门

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

N≤1000,M≤10000,N−K≤10N \leq1000,M \leq 10000,N-K\leq10N1000,M10000,NK10

又是神仙题……

套路性地把每个物品出现的时间丢到一个集合SSS里面,我们要求的是集合第N−K+1N-K+1NK+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)=TSf(T)min(T)

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

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

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

[m=k−1]=∑i=0mCmif(i+1)[m=k-1]=\sum_{i=0}^m C_m^if(i+1)[m=k1]=i=0mCmif(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=k1],G(i)=f(i+1)

F(m)=∑i=0mCmiG(i)F(m)=\sum_{i=0}^mC_m^iG(i)F(m)=i=0mCmiG(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=0m(1)miCmiF(i)

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

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

所以

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)=TS(1)TkCT1k1min(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)TkCT1k1的和

考虑转移

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

选当前点 即

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

iii丢掉

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

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

由于前后的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)Tk+1CT1k1+T(1)Tk+1CT1k2

−∑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)TkCT1k1+T(1)Tk+1CT1k2

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

所以就是

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(i1,j,k)+dp(i1,jpi,k1)dp(i1,jpi,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(i1,j,k)

j=pij=p_ij=pi

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

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

(−1)1−kC0k−1=[k=1](-1)^{1-k}C_0^{k-1}=[k=1](1)1kC0k1=[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(i1,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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nowcoder Forsaken的数列 fhq-treap

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 很明显的数据结构了&#xff0c;splaysplaysplay当然能写&#xff0c;但是fhq−treapfhq-treapfhq−treap更加简洁易懂。 考虑第一个操作&#xff0c;无非就是分裂出[1,pos−1][1,pos-1][1…

HTTP协议支持的方法

方法说明支持的HTTP协议版本GET获取资源1.0,1.1POST传输实体主体1.0,1.1PUT传输文件1.0,1.1DELETE删除文件1.0,1.1OPTIONS询问支持的方法1.1HEAD获取报文首部1.0,1.1TRACE追踪路径1.1CONNECT要求用隧道协议连接代理1.1LINK建立和资源之间的联系1.0UNLINE断开连接关系1.0在这里例…

我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅

作者&#xff1a;Lamond Lu大家好&#xff0c;我是陆楠&#xff0c;来自北京盛安德科技发展有限公司青岛分公司&#xff0c;今年非常有幸作为讲师参加了微软Insider Dev Tour烟台站的活动&#xff0c;我主讲了如何使用最新的微软开发工具开发调试NodeJS项目。与微软结缘与大多数…

【bzoj2555】Substring【后缀平衡树入门】

传送门 &#xff08;bzoj上不去我也很无奈啊&#xff09; 题意&#xff1a;维护一个字符串&#xff0c;支持后面加字符串&#xff0c;给定串询问出现次数。强制在线。 数据范围&#xff1a;暴力跑不过 前置知识&#xff1a;重量平衡树 众所周知&#xff0c;平衡树都用了一…

.NET Core 3.0之深入源码理解Kestrel的集成与应用(一)

写在前面ASP.NET Core 的 Web 服务器默认采用Kestrel&#xff0c;这是一个基于libuv(一个跨平台的基于Node.js的异步I/O库)的跨平台、轻量级的Web服务器。在开始之前&#xff0c;先回顾一下.NET Core 3.0默认的main()方法模板中&#xff0c;我们会调用Host.CreateDefaultBuilde…

HTTP状态码的类别

状态码类别类别原因短语1XX信息性状态码接受的请求正在处理2XX成功状态码请求正常处理完毕3XX重定向状态码需要进行附加操作以完成请求4XX客户端错误状态码服务器无法处理请求5XX服务器错误状态码 服务器处理请求出错 HTTP状态码的数量高达60余种&#xff0c;下面为大家介绍比…

P2596 [ZJOI2006]书架 无旋treap 按照排名分裂

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 实现如下操作&#xff1a; 思路&#xff1a; fhq-treap板子辣&#xff0c;不要被他的编号误导了&#xff0c;我们还是需要按照排名来分裂&#xff0c;从上到下标号1−n1-n1−n即可&#xff0c;注意在按照…

【水】几个网络流图论模型的记录

DAG相关 最小路径覆盖 定义&#xff1a;最少不重路径覆盖DAG 初始时每个点是独立的 之后每次加一条边把两个点连到一起 因为只能用一次&#xff0c;所以是个最大匹配 最小路径覆盖N-拆点后最大匹配\text{最小路径覆盖N-拆点后最大匹配}最小路径覆盖N-拆点后最大匹配 最小链…

surging 微服务引擎 2.0 会有多少惊喜?

surging 微服务引擎从2017年6月至今已经有两年的时间&#xff0c;这两年时间有多家公司使用surging 服务引擎&#xff0c;并且有公司搭建了CI/CD&#xff0c;并且使用了k8s 集群&#xff0c;这里我可以说下几家公司的服务搭建情况&#xff0c;公司名不便透露&#xff0c;我们就…

MySQL中存在索引但不能索引的经典场景(笔记)

以%开头的LIKE查询不能使用B-Tree索引 这个是因为B-Tree数的结构决定的&#xff0c;一般推荐使用全文索引来解决类似的全文检索的问题数据类型出现隐式转换的时候也不会使用索引不满足最左前缀原则的情况下也不会使用到索引如果全表扫描比索引快的话&#xff0c;则不使…

Codeforces Round #630 (Div. 2) E. Height All the Same 排列组合

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 由于n,mn,mn,m都很大&#xff0c;不难猜到这是一个公式题。 首先化简题目中的两个操作&#xff0c;第二个操作就是可以让奇偶性相同的位置的高度相同。第一个操作虽然是改变相邻两个的奇偶…

【洛谷P4719】动态DP【LCT】【矩阵】

之前的后缀平衡树其实没完&#xff0c;只是过于鬼畜就弃了 传送门 题意&#xff1a;带修改点权的最大独立集 N≤1e5N \leq 1e5N≤1e5 一个没啥用的模板&#xff0c;不过适合练习LCT 先写出方程 f(u,0)∑v∈son(u)max{f(v,0),f(v,1)}f(u,0)\sum_{v \in son(u)}max\{f(v,0),f…

对产品质量的一点思考

不管是做产品还是做项目&#xff0c;也不管是采用瀑布模型还是敏捷开发&#xff0c;我们都有一个终极目标&#xff0c;就是能按时交付质量可靠的功能&#xff0c;其中质量尤为重要。本文是我对产品质量的一点思考&#xff0c;如果您所在的团队代码质量很高&#xff0c;很少出BU…

操作系统-学习笔记

王道操作系统&#xff1a;有道云笔记 欢迎评论给意见&#xff01;

Codeforces Round #630 (Div. 2) F. Independent Set 树形dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一棵树&#xff0c;求这棵树的边导出子图中独立集的数量和&#xff0c;独立集大小可以为000。 思路&#xff1a; 先考虑普通的独立集数量怎么求&#xff0c;无非就是分情况讨论一下选根还是不选根&…

CSP赛前总结

1.由奥卡姆剃刀定律&#xff0c;通过各种特判和大量无根据猜测得到的解法不可能正确。 比赛的题目解法可能复杂&#xff0c;但绝不会繁琐。 2.由幸存者偏差&#xff0c;在写题时往往会参考样例&#xff0c;这样样例以外的情况可能会导致bug。 不要相信样例&#xff0c;大样例…

正确使用AES对称加密

正确使用AES对称加密经常我看到项目中有人使用了对称加密算法&#xff0c;用来加密客户或项目传输中的部分数据。但我注意到开发 人员由于不熟悉原理&#xff0c;或者简单复制网上的代码示例&#xff0c;有导致代码存在安全风险。我经常遇到的问题&#xff0c;有如下&#xff1…

Codeforces Round #709 (Div. 1) C. Skyline Photo dp + 单调栈优化

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先一个非常明显的dpdpdp式子就是f[i]max(f[j]val(j1,i))f[i]max(f[j]val(j1,i))f[i]max(f[j]val(j1,i))&#xff0c;其中val(j1,i)val(j1,i)val(j1,i)是[j1,i][j1,i][j1,i]中高度最小的美…

CSP2019游记

Day -不知道多少 第一轮 题出得挺好&#xff0c;终于没有鬼畜的CCF赞歌了 考得还行 Day -1 复习了Tarjan并伪证了一遍&#xff0c;然后颓废了 安利E17大失败 放了几十个满贯 给某同学科普了一些不好的东西&#xff0c;现在他好像自闭了 我谢罪 Day 0 继续肝Tarjan然后…

「数据分析」Sqlserver中的窗口函数的精彩应用之数据差距与数据岛(含答案)...

上一篇介绍过数据差距与数据岛的背景&#xff0c;这里不再赘述&#xff0c;请翻阅上一文。此篇在Sqlserver上给大家演示1000万条记录的计算性能。测试电脑软硬件说明一般般的笔记本电脑&#xff0c;2017年7月&#xff0c;价格&#xff1a;4500。电脑配置数据构造1000万行数据&a…