luoguP4707 重返现世
收集邮票加强版,每个邮票不是等概率获得的了。
而且是获得K个,如果把一个全集S集合找出其获得时间集合(显然获得时间两两不同)的话,那么就是第n-k+1大的期望!
min-max容斥扩展:
推广到期望:
只要求后面的东西
对于集合T,设∑t∈T=SUM,那么,E(min(T))=m/SUM
所以,只要知道SUM,就可以计算贡献
所以,不妨把SUM放进状态里,记录贡献次数(就是-1和组合数那坨)
k=n-k+1之后也很小
f[p][i][j],当k=p时候,前i个,SUM=j的所有集合的贡献
i不加入:<-f[p][i-1][j]
i加入,[i-1][j]转移。p?之前的所有的这样的集合大小都+1了
就是考虑用组合数来巧妙推出|T|->|T|+1
然后就可以递推了!
初值:f[0][0][0]=0,f[k][0][0]=-1,或者手动把i=1的情况做出来也可以
滚动数组
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} namespace Miracle{
const int N=;
const int M=+;
const int K=;
const int mod=;
int n,k,m;
int p[N];
int f[][K][M];
int inv[M];
int ad(int x,int y){
return x+y>=mod?x+y-mod:x+y;
}
int main(){
rd(n);rd(k);rd(m);
for(reg i=;i<=n;++i) rd(p[i]);
k=n-k+;
inv[]=;
for(reg i=;i<=m;++i) {
inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
}
int tmp=;
for(reg t=;t<=k;++t) f[tmp][t][]=-;
for(reg i=;i<=n;++i){
tmp^=;
memset(f[tmp],,sizeof f[tmp]);
for(reg t=;t<=k;++t){
for(reg j=;j<=m;++j){
f[tmp][t][j]=f[tmp^][t][j];
if(j>=p[i]){
f[tmp][t][j]=ad(f[tmp][t][j],ad(f[tmp^][t-][j-p[i]],mod-f[tmp^][t][j-p[i]]));
}
}
}
}
ll ans=;
for(reg j=;j<=m;++j){
ans=ad(ans,(ll)f[tmp][k][j]*m%mod*inv[j]%mod);
}
cout<<ans;
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/
luoguP4707 重返现世的更多相关文章
- 【Luogu4707】重返现世(min-max容斥)
[Luogu4707]重返现世(min-max容斥) 题面 洛谷 求全集的\(k-max\)的期望 题解 \(min-max\)容斥的证明不难,只需要把所有元素排序之后考虑组合数的贡献,容斥系数先设出 ...
- 洛谷 P4707 重返现世
洛谷 P4707 重返现世 k-minimax容斥 有这一个式子:\(E(\max_k(S))=\sum_{T\subseteq S}(-1)^{|T|-k}C_{|T|-1}^{k-1}\min(T ...
- [LGP4707] 重返现世
世界是物质的,物质是运动的,运动是有规律的,规律是可以被认识的. 关于期望意义下min-max容斥,我们认为每个事件的时间来认识事件,max/min S表示集合S中所有时间最后/最前出现的事件,E(m ...
- Luogu P4707 重返现世
题目描述 为了打开返回现世的大门,Yopilla 需要制作开启大门的钥匙.Yopilla 所在的迷失大陆有 \(n\) 种原料,只需要集齐任意 \(k\) 种,就可以开始制作. Yopilla 来到了 ...
- [洛谷P4707] 重返现世
Description 为了打开返回现世的大门,\(Yopilla\) 需要制作开启大门的钥匙.\(Yopilla\) 所在的迷失大陆有 \(n\) 种原料,只需要集齐任意 \(k\) 种,就可以开始 ...
- 洛谷P4707 重返现世 [DP,min-max容斥]
传送门 前置知识 做这题前,您需要认识这个式子: \[ kthmax(S)=\sum_{\varnothing\neq T\subseteq S}{|T|-1\choose k-1} (-1)^{|T ...
- 洛谷 P4707 【重返现世】
题目分析 题目就是求第K种原料的出现期望时间. 考虑广义min-max容斥. \(\text{kthmax}(S)=\sum\limits_{T\subseteq S}(-1)^{|T|-k}\bin ...
- 【题解】洛谷P4707重返现世
在跨年的晚上玩手机被妈妈骂了赶来写题……呜呜呜……但是A题了还是很开心啦,起码没有把去年的题目留到明年去做ヾ(◍°∇°◍)ノ゙也祝大家2019快乐! 这题显然的 kth min-max 容斥就不说了, ...
- 洛谷P4707 重返现世(扩展MinMax容斥+dp)
传送门 我永远讨厌\(dp.jpg\) 前置姿势 扩展\(Min-Max\)容斥 题解 看纳尔博客去→_→ 咱现在还没搞懂为啥初值要设为\(-1\)-- //minamoto #include< ...
随机推荐
- CentOS7安装Jenkins自动化部署maven项目
前言: 最近要弄一个jenkins工具,已经安装好了并且jenkins使用部署项目的流程已经基本走通,上图: 话不多说,开始 第一步:安装jenkins: [ 准备环境: 在centOS7环境上:安装 ...
- select2 简单解析
<select name="supplierId" class="customsBrokerSel select2 absOpacity select2-hidde ...
- 打印module查看参数
module1下的index.js require('./test2') main.js require('./module1')和require('./module2') 打印每个文件的module ...
- 动态渲染页面爬取(Python 网络爬虫) ---Selenium的使用
Selenium 的使用 Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击.下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬.对于一些JavaS ...
- laravel5.3安装redis扩展包
1,编辑 laravel 根目录下的 composer.json 文件: "require": { "php": ">=5.6.4", ...
- 导出数据到EXL表格中
项目使用的是SSI框架,通过struts访问到action xml文件: <action name="fabAttributedaochu" class="com. ...
- Logging - MVC Using Log4net Save to File and Database
第一步:创建Config文件夹和log4net.config 第二步:在log4net.confg黏贴以下配置 <?xml version="1.0" encoding=&q ...
- Vue获取dom和数据监听
Vue获取dom对象 在js和jq中我们都能获取dom对象例如 // 获取id=1的div标签 <div id=d1>dom对象</div> // js语法 let ele = ...
- MySql获取树型结构的所有子节点
stackoverflow的解决方案,亲测有效: SELECT * FROM person WHERE department IN (SELECT department_id FROM departm ...
- Codeforces Round #415 Div. 1
A:考虑每对最大值最小值的贡献即可. #include<iostream> #include<cstdio> #include<cmath> #include< ...