题目链接:

[集训队作业2018]小Z的礼物

题目要求的就是最后一个喜欢的物品的期望得到时间。

根据$min-max$容斥可以知道$E(max(S))=\sum\limits_{T\subseteq S}^{ }(-1)^{|T|-1}E(min(T))$

那么只需要知道每个子集中最早得到的物品的期望时间即可得出答案。

对于每个子集,最早得到的物品的期望时间就是一次选择能得到这个子集中元素的概率的倒数。

用一次选择能得到这个子集中的元素的方案数除上总方案数(每次共有$2*n*m-n-m$种选择方案)就能得到对应的概率。

最暴力的方法就是枚举$2^{cnt}$个子集然后对每个求概率。

但可以发现方案数最多只有$2*n*m-n-m$个,我们可以轮廓线$DP$求出每个集合的方案数。

设$f[s][k]$表示轮廓线为$s$,方案数为$k$的集合个数。

因为容斥系数只有$-1$和$1$两种,所以在$DP$时直接将容斥系数算进去即可。

最后对于每个子集求出期望然后加和即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define mod 998244353
using namespace std;
int inv[1200];
int f[2][70][1200];
int n,m;
char mp[7][110];
int S,sum;
int ans;
int now,pre;
int main()
{
scanf("%d%d",&n,&m);
S=(1<<n)-1;
sum=2*n*m-n-m;
for(int i=1;i<=n;i++)
{
scanf("%s",mp[i]+1);
}
inv[0]=inv[1]=1;
for(int i=2;i<1200;i++)
{
inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
}
f[0][0][0]=mod-1;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
pre=now,now^=1;
memset(f[now],0,sizeof(f[now]));
for(int s=0;s<=S;s++)
{
for(int k=0;k<=sum;k++)
{
if(f[pre][s][k])
{
int t=s&(S^(1<<(j-1)));
f[now][t][k]+=f[pre][s][k],f[now][t][k]%=mod;
if(mp[j][i]=='*')
{
t|=1<<(j-1);
int num=0;
if(j>1&&!(s&(1<<(j-2))))num++;
if(i>1&&!(s&(1<<(j-1))))num++;
if(i<m)num++;
if(j<n)num++;
f[now][t][k+num]+=mod-f[pre][s][k],f[now][t][k+num]%=mod;
}
}
}
}
}
}
for(int s=0;s<=S;s++)
{
for(int i=1;i<=sum;i++)
{
ans+=1ll*f[now][s][i]*inv[i]%mod,ans%=mod;
}
}
ans=1ll*ans*sum%mod;
printf("%d",ans);
}

[UOJ422][集训队作业2018]小Z的礼物——轮廓线DP+min-max容斥的更多相关文章

  1. UOJ 422 [集训队作业2018] 小Z的礼物 min-max容斥 期望 轮廓线dp

    LINK:小Z的礼物 太精髓了 我重学了一遍min-max容斥 重写了一遍按位或才写这道题的. 还是期望多少时间可以全部集齐. 相当于求出 \(E(max(S))\)表示最后一个出现的期望时间. 根据 ...

  2. bzoj 4031: [HEOI2015]小Z的房间 轮廓线dp

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 98  Solved: 29[Submit][Status] ...

  3. UOJ#449. 【集训队作业2018】喂鸽子(期望dp)

    题意 有 \(n\) 只鸽子,每只鸽子需要 \(k\) 粒玉米才能喂饱.问每次随意喂给 \(n\) 个鸽子中的一个,期望多久所有鸽子都被喂饱. 对于 \(998244353\) 取模. 数据范围 \( ...

  4. UOJ422. 【集训队作业2018】小Z的礼物 [min-max容斥,插头DP]

    UOJ 思路 由于没有代码和AC记录的支撑,以下思路可能有错. 看到全部取完,大概可以想到min-max容斥. 由于期望的表达式里面合法方案的个数是在分母里面的,所以可以想到把它记录在状态里. 然而由 ...

  5. 【UOJ#422】【集训队作业2018】小Z的礼物(min-max容斥,轮廓线dp)

    [UOJ#422][集训队作业2018]小Z的礼物(min-max容斥,轮廓线dp) 题面 UOJ 题解 毒瘤xzy,怎么能搬这种题当做WC模拟题QwQ 一开始开错题了,根本就不会做. 后来发现是每次 ...

  6. 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物

    T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...

  7. UOJ#422. 【集训队作业2018】小Z的礼物

    #422. [集训队作业2018]小Z的礼物 min-max容斥 转化为每个集合最早被染色的期望时间 如果有x个选择可以染色,那么期望时间就是((n-1)*m+(m-1)*n))/x 但是x会变,中途 ...

  8. UOJ #449. 【集训队作业2018】喂鸽子

    UOJ #449. [集训队作业2018]喂鸽子 小Z是养鸽子的人.一天,小Z给鸽子们喂玉米吃.一共有n只鸽子,小Z每秒会等概率选择一只鸽子并给他一粒玉米.一只鸽子饱了当且仅当它吃了的玉米粒数量\(≥ ...

  9. [集训队作业2018]蜀道难——TopTree+贪心+树链剖分+链分治+树形DP

    题目链接: [集训队作业2018]蜀道难 题目大意:给出一棵$n$个节点的树,要求给每个点赋一个$1\sim n$之内的权值使所有点的权值是$1\sim n$的一个排列,定义一条边的权值为两端点权值差 ...

随机推荐

  1. sublime实现一键代码格式化

    效果预览 实现 首先下载插件SublimeAstyleFormatter 方法:ctrl + shift + P后输入install Package. 等待一段时间后输入SublimeAstyleFo ...

  2. DAS、SAN和NAS三种存储方式

    DAS存储 DAS存储在我们生活中是非常常见的,尤其是在中小企业应用中,DAS是最主要的应用模式,存储系统被直连到应用的服务器中,在中小企业中,许多的数据应用是必须安装在直连的DAS存储器上. DAS ...

  3. org.springframework.beans.factory.NoUniqueBeanDefinitionException 导致原因之一

    导致此异常原因很多,以下仅是针对其中一种因素的解决办法. 下面是DAO接口.Service接口.Service实现类的全路径名(全部定义在com.xxx.projetc包下) com.xxx.proj ...

  4. 前后端分离djangorestframework——认证组件

    authentication 认证是干嘛的已经不需要多说.而前后端未分离的认证基本是用cookie或者session,前后端分离的一般用token 全局认证 先创建一个django项目,项目名为drf ...

  5. python之生成随机密码

    https://www.cnblogs.com/evablogs/p/7096583.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/usr/bin/py ...

  6. 有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value替换为A中对应的value

    update B b set b.value=(select max(a.value) from A a where b.key=a.key) from A c where b.key=c.key) ...

  7. 黑洞有毛 or 黑洞无毛:4星|《环球科学》2019年03月号

    <环球科学>2019年03月号 高水平的科普杂志.本期我感兴趣的话题有: 1:65岁以上老年人是转发假新闻的主力: 2:人的面孔特征可以通过50个维度来定义: 3:华裔科学家发现人脑颞叶中 ...

  8. 我的第一个python web开发框架(31)——定制ORM(七)

    几个复杂的ORM方式都已介绍完了,剩下一些常用的删除.获取记录数量.统计合计数.获取最大值.获取最小值等方法我就不一一详细介绍了,直接给出代码大家自行查看. #!/usr/bin/env python ...

  9. const关键字到底该怎么用

    原文地址:https://www.yanbinghu.com/2019/01/28/7442.html 前言 我们都知道使用const关键字限定一个变量为只读,但它是真正意义上的只读吗?实际中又该如何 ...

  10. 前端学习-基础部分-HTML

    开始今日份整理 1.HTML基础标签 1.1 标签 标签格式 HTML规定用英文尖括号,<>包起来,例如<html> HTML中通常标签成对出现,分为开始标签与结束标签,结束标 ...