[UOJ422]小Z的礼物
设要取的物品集合为$S$,$E=n(m-1)+(n-1)m$,$x_T$为覆盖了$T$中至少一个元素的$1\times2$数量
$$\begin{aligned}\sum\limits_{i=1}^\infty i[恰好i次]&=\sum\limits_{i=1}^\infty[\geq i次]\\&=\sum\limits_{i=0}^\infty[i次后未成功]\\&=\sum\limits_{i=0}^\infty\sum\limits_{\substack{T\subseteq S\\T\ne\varnothing}}(-1)^{|T|+1}\left(1-\frac{x_T}E\right)^i\\&=E\sum\limits_{\substack{T\subseteq S\\T\ne\varnothing}}(-1)^{|T|+1}\frac1{x_T}\end{aligned}$$
所以要对每个$1\leq k\leq E$计数有多少个大小为奇数/偶数的集合$T$满足$x_T=k$
考虑按列-行做轮廓线DP,设$f_{i,j,k,0/1}$表示当前DP到第$i$个格子,当前轮廓线上“=*且在$T$中”的状态为$j$,$x_T=k$,$|T|\equiv0/1\pmod2$的$T$的数量
时间复杂度$O(n^2m^22^n)$
#include<stdio.h>
#include<string.h>
typedef long long ll;
const int mod=998244353;
int mul(int a,int b){return(ll)a*b%mod;}
void inc(int&a,int b){(a+=b)>=mod?a-=mod:0;}
int de(int a,int b){return(a-=b)<0?a+mod:a;}
int pow(int a,int b){
int s=1;
while(b){
if(b&1)s=mul(s,a);
a=mul(a,a);
b>>=1;
}
return s;
}
char s[10][110];
int n,m,E;
int inv[1210],f[64][1210][2],g[64][1210][2];
int is(int x,int k){
return k>=0?x>>k&1:0;
}
int main(){
int i,j,k,l,u,v,res;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%s",s[i]+1);
E=n*(m-1)+(n-1)*m;
inv[1]=1;
for(i=2;i<=E;i++)inv[i]=mul(mod/i,mod-inv[mod%i]);
f[0][0][0]=1;
for(j=1;j<=m;j++){
for(i=1;i<=n;i++){
memset(g,0,sizeof(g));
for(k=0;k<1<<n;k++){
for(l=0;l<=E;l++){
if(!(f[k][l][0]|f[k][l][1]))continue;
u=k&~(1<<(i-1));
v=l+is(k,i-1)+is(k,i-2);
inc(g[u][v][0],f[k][l][0]);
inc(g[u][v][1],f[k][l][1]);
if(s[i][j]=='*'){
u=k|(1<<(i-1));
v=l+(i>1)+(j>1);
inc(g[u][v][0],f[k][l][1]);
inc(g[u][v][1],f[k][l][0]);
}
}
}
memcpy(f,g,sizeof(g));
}
}
res=0;
for(i=1;i<=E;i++){
u=v=0;
for(j=0;j<1<<n;j++){
inc(u,f[j][i][1]);
inc(v,f[j][i][0]);
}
inc(res,mul(inv[i],de(u,v)));
}
printf("%d",mul(res,E));
}
[UOJ422]小Z的礼物的更多相关文章
- [UOJ422][集训队作业2018]小Z的礼物——轮廓线DP+min-max容斥
题目链接: [集训队作业2018]小Z的礼物 题目要求的就是最后一个喜欢的物品的期望得到时间. 根据$min-max$容斥可以知道$E(max(S))=\sum\limits_{T\subseteq ...
- 【UOJ#422】【集训队作业2018】小Z的礼物(min-max容斥,轮廓线dp)
[UOJ#422][集训队作业2018]小Z的礼物(min-max容斥,轮廓线dp) 题面 UOJ 题解 毒瘤xzy,怎么能搬这种题当做WC模拟题QwQ 一开始开错题了,根本就不会做. 后来发现是每次 ...
- 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物
T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...
- UOJ#422. 【集训队作业2018】小Z的礼物
#422. [集训队作业2018]小Z的礼物 min-max容斥 转化为每个集合最早被染色的期望时间 如果有x个选择可以染色,那么期望时间就是((n-1)*m+(m-1)*n))/x 但是x会变,中途 ...
- UOJ 422 [集训队作业2018] 小Z的礼物 min-max容斥 期望 轮廓线dp
LINK:小Z的礼物 太精髓了 我重学了一遍min-max容斥 重写了一遍按位或才写这道题的. 还是期望多少时间可以全部集齐. 相当于求出 \(E(max(S))\)表示最后一个出现的期望时间. 根据 ...
- UOJ422. 【集训队作业2018】小Z的礼物 [min-max容斥,插头DP]
UOJ 思路 由于没有代码和AC记录的支撑,以下思路可能有错. 看到全部取完,大概可以想到min-max容斥. 由于期望的表达式里面合法方案的个数是在分母里面的,所以可以想到把它记录在状态里. 然而由 ...
- UOJ#422 小Z的礼物
非常神奇的一个套路......首先min-max容斥一波,变成枚举子集然后求所有子集min的期望. 一个子集的期望怎么求?我们可以求出所有的r个选法中能够选到这个子集的方案数k,那么概率就是k / r ...
- uoj#422. 【集训队作业2018】小Z的礼物(MIn-Max容斥+插头dp)
题面 传送门 题解 好迷-- 很明显它让我们求的是\(Max(S)\),我们用\(Min-Max\)容斥,因为\(Min(S)\)是很好求的,只要用方案数除以总方案数算出概率,再求出倒数就是期望了 然 ...
- 【集训队作业2018】小Z的礼物
小水题.题意就是不断随机放一个 \(1 \times 2\) 骨牌,然后取走里面的东西.求期望多少次取走所有的东西.然后有一维很小. 首先显然 minmax 容斥,将最后取走转化为钦定一些物品,求第一 ...
随机推荐
- UNIX网络编程 第6章 I/O复用:select和poll函数
UNIX网络编程 第6章 I/O复用:select和poll函数
- Unity 3(二):Unity在AOP方面的应用
本文关注以下方面(环境为VS2012..Net Framework 4.5以及Unity 3): AOP简介: Interception using Unity示例 配置文件示例 一.AOP简介 AO ...
- mysql优化【转】
最近听讲了博森瑞老师的mysql优化公开课,这个是我整理的笔记. 现在说一下mysql的内存和I/O方面的两个特点. 一. mysql内存特点: 1. 也有全局内存和每个session的内存(每个s ...
- Asp.Net使用百度编辑器(ueditor)
1. 1.4.3以上版本将不再承诺支持ie6/ie7. 2.如果是aspx 需要加上 ValidateRequest="false" 3.Web.config <syst ...
- 十二、springcloud之展示追踪数据 Sleuth+zipkin
一.Zipkin简介 Zipkin是Twitter的一个开源项目,它基于Google Dapper实现.我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们 ...
- 31 Godoc: documenting Go code 编写良好的文档关于godoc
Godoc: documenting Go code 编写良好的文档关于godoc 31 March 2011 The Go project takes documentation seriousl ...
- 【小程序开发】上拉加载更多demo
wxml: <scroll-view class='swiper-scroll' scroll-y="{{true}}" bindscrolltolower="lo ...
- HDU 3861 The King’s Problem(强连通分量+最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 题目大意: 在csdn王国里面, 国王有一个新的问题. 这里有N个城市M条单行路,为了让他的王国 ...
- EXEC与sp_executesql的区别及应用
在项目中需要将内部DECLARE的参数通过EXEC赋值后再作为下面一个EXEC参数的时候,发现都使用EXEC时,问题就不是那么简单了.趁着没有睡意研究下.EXEC的使用与缺点EXEC命令有两种用法,一 ...
- RCTF2015 pwn试题分析
pwn200 漏洞给的很明显,先是读到了main的局部数组中,然后在子函数中向子函数的局部数组栈里复制. 总体思路是leak system的地址,然后再向一个固定地址写入/bin/sh,最后执行sys ...