题目链接

https://www.luogu.org/problem/P4707

题解

最近被神仙题八连爆了……

首先Min-Max容斥肯定都能想到,问题是这题要用一个扩展版的——Kth Min-Max容斥
这个东西需要对Min-Max容斥的本质有着比较深刻的理解。
首先我们从另一个角度证明Min-Max容斥的正确性: \(\max(S)=\sum_{T\in S}f(|T|)\min(T)\), 对于第\((x+1)\)大来说它被计算的次数是\(\sum_{k\ge 0} {x\choose k}f(k+1)\),则有\([x=0]=\sum_{k\ge 0} {x\choose k}f(k+1)\), 二项式反演之后令\(f(k)=(-1)^{k-1}\)即可达到目的。
那么考虑把刚才式子中\([x=0]\)换成\([x=k-1]\)会怎样? 依然采取构造系数的思路,得出的结果是: \(f[x]=(-1)^{x-k}{x-1\choose k-1}\).

问题相当于求第\(K\)大的期望,所以可以转化成子集最小值: \(\text{kthmax}(S)=\sum_{T\in S}(-1)^{|T|-K}{|T|-1\choose k-1}\min(T)=\sum_{T\in S}\frac{m}{p_T}(-1)^{|T|-K}{|T|-1\choose k-1}\), 其中\(p_T=\sum_{i\in T} p_i\)
这个东西可以用一个dp来搞: 设\(dp[i][j][k]\)表示前\(i\)个数\(p\)之和为\(j\), 当组合数的下指标为\(k\)时每种方案乘以容斥系数之和。
考虑转移: 如果第\(i\)个元素不属于\(T\), 显然是加上\(dp[i-1][j][k]\); 如果属于\(T\), 那么要求的组合数\({|T|-1\choose k-1}={|T|-2\choose k-1}+{|T|-2\choose k-2}\), 对于前一项直接是\(dp[i-1][j-p_i][k]\), 对于后一项因为是从\(k-1\)转移过来,所以要多乘个\(-1\), 最终结果是减去\((dp[i-1][j-p_i][k]-dp[i-1][j-p_i][k-1])\).
然而这个dp的边界问题很难处理。这时我们不妨脱离实际问题,去思考一下组合数在指标为负数时的定义,直接代入可得\(dp[0][0][k]=-1 (k>0)\).
(然而感觉这种边界设置方法并不严谨)

时间复杂度\(O(nm(n-k))\).

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cassert>
#include<iostream>
#define llong long long
using namespace std;inline int read()
{int x=0; bool f=1; char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=0;for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^'0');if(f) return x;return -x;
}const int N = 1000;
const int S = 1e4;
const int M = 11;
const int P = 998244353;
llong quickpow(llong x,llong y)
{llong cur = x,ret = 1ll;for(int i=0; y; i++){if(y&(1ll<<i)) {y-=(1ll<<i); ret = ret*cur%P;}cur = cur*cur%P;}return ret;
}
llong mulinv(llong x) {return quickpow(x,P-2);}llong a[N+3];
llong dp[S+3][M+2];
int n,m,s;int main()
{scanf("%d%d%d",&n,&m,&s); m = n-m+1;for(int i=1; i<=n; i++) scanf("%lld",&a[i]);for(int i=1; i<=m; i++) dp[0][i] = P-1;for(int i=1; i<=n; i++){for(int j=s; j>=a[i]; j--){for(int k=1; k<=m; k++){dp[j][k] = (dp[j][k]+dp[j-a[i]][k-1]-dp[j-a[i]][k]+P)%P;}}}llong ans = 0ll;for(int i=1; i<=s; i++){ans = (ans+dp[i][m]*s%P*mulinv(i))%P;}printf("%lld\n",ans);return 0;
}

Luogu P4707 重返现世 (拓展Min-Max容斥、DP)相关推荐

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

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

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

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

  3. [luogu P4707] 重返现世

    Description 洛谷题目链接:https://www.luogu.org/problemnew/show/P4707 Solution 前置广义\(\min-\max\)容斥,不懂的可以看看我 ...

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

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

  5. Luogu P4707 重返现世

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

  6. 【题解】P4707 重返现世

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

  7. 洛谷 P4707 重返现世

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

  8. P5643-[PKUWC2018]随机游走【min-max容斥,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P5643 题目大意 给出nnn个点的一棵树,一个人从点xxx开始随机游走,然后QQQ次询问给出一个点集SSS,求期望 ...

  9. LOJ#3124. 「CTS2019 | CTSC2019」氪金手游 容斥+DP

    神仙容斥+DP可还行. code: #include <cstdio> #include <cmath> #include <vector> #include &l ...

最新文章

  1. mybatis select语句会默认带排序吗_MyBatis中#和$的区别详解
  2. Apache Ranger插件的美丽简洁
  3. [转]Install Windows Server 2012 in VMware Workstation
  4. fir滤波器课程设计matlab,Matlab课程设计---FIR数字滤波器
  5. UI设计实用素材|订阅按钮(CTA按钮 )
  6. phpstudy运行时出现没有安装VC库
  7. 问题十:【总结】解决了问题四~问题九,vec3这个类的代码应该都能看懂了
  8. 程序functionLua基础 小结(两个Lua程序示例)
  9. Kali Linux零基础入门到精通
  10. 三校生高考计算机基础知识,三校生高考计算机模拟试卷(一)
  11. linux查看隐藏文件命令
  12. 43岁,转行当了大学老师
  13. matlab的shading,matlab colormap,caxis,shading,hsv,pcolor, alpha
  14. 1.两数之和(python)
  15. 毕设 电脑维修_入库出库结算论文
  16. zte android截屏快捷键,中兴红牛V5手机怎么截屏 中兴红牛V5截图技巧图解
  17. 客厅与阳台之间的设计施工,要不要打通呢?
  18. 第1节-从0到1快速建设网站-最终实现商业化盈利
  19. Android简易闹钟实现
  20. 怎么样装修好阿里巴巴国际站产品边框进度条环绕围绕效果动态gif制作代码全屏展示图片首页装修技巧方法教程视频全球旺铺阿里旺铺自定义内容装修 模板模块设置内容

热门文章

  1. 图像凸性检测函数convexityDefects在Python2.7下使用opencv3.0的问题
  2. unity三维向量变化为角度_UNITY3D两个物体相对位置、角度、相对速度方向
  3. 小波的秘密6_小波包的理解
  4. Delphi指针大全
  5. SQL中object_id函数的用法
  6. BugkuCTF-Misc:白哥的鸽子
  7. 如何复制带格式的Notepad++文本?
  8. VMware上的ubuntu14.04与win7共享文件夹
  9. 解惑(三)----- 深入理解Python中的self参数和__init__(self)方法--通过类比Java语言
  10. springboot学习笔记(七)